home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / DJGPP / GAS211DC.ZIP / docs / gas / as.inf (.txt) < prev    next >
GNU Info File  |  1993-11-13  |  243KB  |  5,038 lines

  1. This is Info file as.inf, produced by Makeinfo-1.55 from the input file
  2. as.tex.
  3. START-INFO-DIR-ENTRY
  4. * As::                          The GNU assembler.
  5. END-INFO-DIR-ENTRY
  6.    This file documents the GNU Assembler "as".
  7.    Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
  8.    Permission is granted to make and distribute verbatim copies of this
  9. manual provided the copyright notice and this permission notice are
  10. preserved on all copies.
  11.    Permission is granted to copy and distribute modified versions of
  12. this manual under the conditions for verbatim copying, provided also
  13. that the section entitled "GNU General Public License" is included
  14. exactly as in the original, and provided that the entire resulting
  15. derived work is distributed under the terms of a permission notice
  16. identical to this one.
  17.    Permission is granted to copy and distribute translations of this
  18. manual into another language, under the above conditions for modified
  19. versions, except that the section entitled "GNU General Public License"
  20. may be included in a translation approved by the Free Software
  21. Foundation instead of in the original English.
  22. File: as,  Node: Top,  Next: Overview,  Prev: (DIR),  Up: (DIR)
  23. Using as
  24. ********
  25.    This file is a user guide to the GNU assembler `as'.
  26. * Menu:
  27. * Overview::                    Overview
  28. * Invoking::                    Command-Line Options
  29. * Syntax::                      Syntax
  30. * Sections::                    Sections and Relocation
  31. * Symbols::                     Symbols
  32. * Expressions::                 Expressions
  33. * Pseudo Ops::                  Assembler Directives
  34. * Machine Dependencies::        Machine Dependent Features
  35. * Copying::                     GNU GENERAL PUBLIC LICENSE
  36. * Acknowledgements::            Who Did What
  37. * Index::                       Index
  38. File: as,  Node: Overview,  Next: Invoking,  Prev: Top,  Up: Top
  39. Overview
  40. ********
  41.    Here is a brief summary of how to invoke `as'.  For details, *note
  42. Comand-Line Options: Invoking..
  43.        as [ -a[dhlns] ] [ -D ] [ -f ]
  44.         [ -I PATH ] [ -K ] [ -L ]
  45.         [ -o OBJFILE ] [ -R ] [ -v ] [ -w ]
  46.         [ -Av6 | -Av7 | -Av8 | -Asparclite | -bump ]
  47.         [ -ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC ]
  48.         [ -b ] [ -norelax ]
  49.         [ -l ] [ -m68000 | -m68010 | -m68020 | ... ]
  50.         [ -- | FILES ... ]
  51. `-a[dhlns]'
  52.      Turn on listings; `-ad', omit debugging pseudo-ops from listing,
  53.      `-ah', include high-level source, `-al', assembly listing, `-an',
  54.      no forms processing, `-as', symbols.  These options may be
  55.      combined; *e.g.*, `-aln' for assembly listing without forms
  56.      processing.  By itself, `-a' defaults to `-ahls' -- that is, all
  57.      listings turned on.
  58.      This option is accepted only for script compatibility with calls to
  59.      other assemblers; it has no effect on `as'.
  60.      "fast"--skip whitespace and comment preprocessing (assume source is
  61.      compiler output)
  62. `-I PATH'
  63.      Add PATH to the search list for `.include' directives
  64.      Issue warnings when difference tables altered for long
  65.      displacements.
  66.      Keep (in symbol table) local symbols, starting with `L'
  67. `-o OBJFILE'
  68.      Name the object-file output from `as'
  69.      Fold data section into text section
  70.      Announce `as' version
  71.      Suppress warning messages
  72. `-- | FILES ...'
  73.      Standard input, or source files to assemble.
  74.    The following options are available when as is configured for the
  75. Intel 80960 processor.
  76. `-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC'
  77.      Specify which variant of the 960 architecture is the target.
  78.      Add code to collect statistics about branches taken.
  79. `-norelax'
  80.      Do not alter compare-and-branch instructions for long
  81.      displacements; error if necessary.
  82.    The following options are available when as is configured for the
  83. Motorola 68000 series.
  84.      Shorten references to undefined symbols, to one word instead of
  85.      two.
  86. `-m68000 | -m68008 | -m68010 | -m68020 | -m68030 | -m68040'
  87. `| -m68302 | -m68331 | -m68332 | -m68333 | -m68340 | -mcpu32'
  88.      Specify what processor in the 68000 family is the target.  The
  89.      default is normally the 68020, but this can be changed at
  90.      configuration time.
  91. `-m68881 | -m68882 | -mno-68881 | -mno-68882'
  92.      The target machine does (or does not) have a floating-point
  93.      coprocessor.  The default is to assume a coprocessor for 68020,
  94.      68030, and cpu32.  Although the basic 68000 is not compatible with
  95.      the 68881, a combination of the two can be specified, since it's
  96.      possible to do emulation of the coprocessor instructions with the
  97.      main processor.
  98. `-m68851 | -mno-68851'
  99.      The target machine does (or does not) have a memory-management
  100.      unit coprocessor.  The default is to assume an MMU for 68020 and
  101.      up.
  102.    The following options are available when `as' is configured for the
  103. SPARC architecture:
  104. `-Av6 | -Av7 | -Av8 | -Asparclite'
  105.      Explicitly select a variant of the SPARC architecture.
  106. `-bump'
  107.      Warn when the assembler switches to another architecture.
  108. * Menu:
  109. * Manual::                      Structure of this Manual
  110. * GNU Assembler::               as, the GNU Assembler
  111. * Object Formats::              Object File Formats
  112. * Command Line::                Command Line
  113. * Input Files::                 Input Files
  114. * Object::                      Output (Object) File
  115. * Errors::                      Error and Warning Messages
  116. File: as,  Node: Manual,  Next: GNU Assembler,  Up: Overview
  117. Structure of this Manual
  118. ========================
  119.    This manual is intended to describe what you need to know to use GNU
  120. `as'.  We cover the syntax expected in source files, including notation
  121. for symbols, constants, and expressions; the directives that `as'
  122. understands; and of course how to invoke `as'.
  123.    This manual also describes some of the machine-dependent features of
  124. various flavors of the assembler.
  125.    On the other hand, this manual is *not* intended as an introduction
  126. to programming in assembly language--let alone programming in general!
  127. In a similar vein, we make no attempt to introduce the machine
  128. architecture; we do *not* describe the instruction set, standard
  129. mnemonics, registers or addressing modes that are standard to a
  130. particular architecture.  You may want to consult the manufacturer's
  131. machine architecture manual for this information.
  132. File: as,  Node: GNU Assembler,  Next: Object Formats,  Prev: Manual,  Up: Overview
  133. as, the GNU Assembler
  134. =====================
  135.    GNU `as' is really a family of assemblers.  If you use (or have
  136. used) the GNU assembler on one architecture, you should find a fairly
  137. similar environment when you use it on another architecture.  Each
  138. version has much in common with the others, including object file
  139. formats, most assembler directives (often called "pseudo-ops") and
  140. assembler syntax.
  141.    `as' is primarily intended to assemble the output of the GNU C
  142. compiler `gcc' for use by the linker `ld'.  Nevertheless, we've tried
  143. to make `as' assemble correctly everything that other assemblers for
  144. the same machine would assemble.  Any exceptions are documented
  145. explicitly (*note Machine Dependencies::.).  This doesn't mean `as'
  146. always uses the same syntax as another assembler for the same
  147. architecture; for example, we know of several incompatible versions of
  148. 680x0 assembly language syntax.
  149.    Unlike older assemblers, `as' is designed to assemble a source
  150. program in one pass of the source file.  This has a subtle impact on the
  151. `.org' directive (*note `.org': Org.).
  152. File: as,  Node: Object Formats,  Next: Command Line,  Prev: GNU Assembler,  Up: Overview
  153. Object File Formats
  154. ===================
  155.    The GNU assembler can be configured to produce several alternative
  156. object file formats.  For the most part, this does not affect how you
  157. write assembly language programs; but directives for debugging symbols
  158. are typically different in different file formats.  *Note Symbol
  159. Attributes: Symbol Attributes.
  160. File: as,  Node: Command Line,  Next: Input Files,  Prev: Object Formats,  Up: Overview
  161. Command Line
  162. ============
  163.    After the program name `as', the command line may contain options
  164. and file names.  Options may appear in any order, and may be before,
  165. after, or between file names.  The order of file names is significant.
  166.    `--' (two hyphens) by itself names the standard input file
  167. explicitly, as one of the files for `as' to assemble.
  168.    Except for `--' any command line argument that begins with a hyphen
  169. (`-') is an option.  Each option changes the behavior of `as'.  No
  170. option changes the way another option works.  An option is a `-'
  171. followed by one or more letters; the case of the letter is important.
  172. All options are optional.
  173.    Some options expect exactly one file name to follow them.  The file
  174. name may either immediately follow the option's letter (compatible with
  175. older assemblers) or it may be the next command argument (GNU
  176. standard).  These two command lines are equivalent:
  177.      as -o my-object-file.o mumble.s
  178.      as -omy-object-file.o mumble.s
  179. File: as,  Node: Input Files,  Next: Object,  Prev: Command Line,  Up: Overview
  180. Input Files
  181. ===========
  182.    We use the phrase "source program", abbreviated "source", to
  183. describe the program input to one run of `as'.  The program may be in
  184. one or more files; how the source is partitioned into files doesn't
  185. change the meaning of the source.
  186.    The source program is a concatenation of the text in all the files,
  187. in the order specified.
  188.    Each time you run `as' it assembles exactly one source program.  The
  189. source program is made up of one or more files.  (The standard input is
  190. also a file.)
  191.    You give `as' a command line that has zero or more input file names.
  192. The input files are read (from left file name to right).  A command
  193. line argument (in any position) that has no special meaning is taken to
  194. be an input file name.
  195.    If you give `as' no file names it attempts to read one input file
  196. from the `as' standard input, which is normally your terminal.  You may
  197. have to type ctl-D to tell `as' there is no more program to assemble.
  198.    Use `--' if you need to explicitly name the standard input file in
  199. your command line.
  200.    If the source is empty, `as' will produce a small, empty object file.
  201. Filenames and Line-numbers
  202. --------------------------
  203.    There are two ways of locating a line in the input file (or files)
  204. and either may be used in reporting error messages.  One way refers to
  205. a line number in a physical file; the other refers to a line number in a
  206. "logical" file.  *Note Error and Warning Messages: Errors.
  207.    "Physical files" are those files named in the command line given to
  208. `as'.
  209.    "Logical files" are simply names declared explicitly by assembler
  210. directives; they bear no relation to physical files.  Logical file names
  211. help error messages reflect the original source file, when `as' source
  212. is itself synthesized from other files.  *Note `.app-file': App-File.
  213. File: as,  Node: Object,  Next: Errors,  Prev: Input Files,  Up: Overview
  214. Output (Object) File
  215. ====================
  216.    Every time you run `as' it produces an output file, which is your
  217. assembly language program translated into numbers.  This file is the
  218. object file, named `b.out', if `as' is configured for the Intel 80960,
  219. or unless you tell `as' to give it another name by using the `-o'
  220. option.  Conventionally, object file names end with `.o'.  The default
  221. name of `a.out' is used for historical reasons:  older assemblers were
  222. capable of assembling self-contained programs directly into a runnable
  223. program.  (For some formats, this isn't currently possible, but it can
  224. be done for `a.out' format.)
  225.    The object file is meant for input to the linker `ld'.  It contains
  226. assembled program code, information to help `ld' integrate the
  227. assembled program into a runnable file, and (optionally) symbolic
  228. information for the debugger.
  229. File: as,  Node: Errors,  Prev: Object,  Up: Overview
  230. Error and Warning Messages
  231. ==========================
  232.    `as' may write warnings and error messages to the standard error
  233. file (usually your terminal).  This should not happen when  a compiler
  234. runs `as' automatically.  Warnings report an assumption made so that
  235. `as' could keep assembling a flawed program; errors report a grave
  236. problem that stops the assembly.
  237.    Warning messages have the format
  238.      file_name:NNN:Warning Message Text
  239. (where NNN is a line number).  If a logical file name has been given
  240. (*note `.app-file': App-File.) it is used for the filename, otherwise
  241. the name of the current input file is used.  If a logical line number
  242. was given (*note `.line': Line.) then it is used to calculate the
  243. number printed, otherwise the actual line in the current source file is
  244. printed.  The message text is intended to be self explanatory (in the
  245. grand Unix tradition).
  246.    Error messages have the format
  247.      file_name:NNN:FATAL:Error Message Text
  248.    The file name and line number are derived as for warning messages.
  249. The actual message text may be rather less explanatory because many of
  250. them aren't supposed to happen.
  251. File: as,  Node: Invoking,  Next: Syntax,  Prev: Overview,  Up: Top
  252. Command-Line Options
  253. ********************
  254.    This chapter describes command-line options available in *all*
  255. versions of the GNU assembler; *note Machine Dependencies::., for
  256. options specific to particular machine architectures.
  257.    If you are invoking `as' via the GNU C compiler (version 2), you can
  258. use the `-Wa' option to pass arguments through to the assembler.  The
  259. assembler arguments must be separated from each other (and the `-Wa')
  260. by commas.  For example:
  261.      gcc -c -g -O -Wa,-alh,-L file.c
  262.    will cause a listing to be emitted to standard output with high-level
  263. and assembly source.
  264.    Many compiler command-line options, such as `-R' and many
  265. machine-specific options, will be automatically be passed to the
  266. assembler by the compiler, so usually you do not need to use this `-Wa'
  267. mechanism.
  268. * Menu:
  269. * a::             -a[dhlns] enable listings
  270. * D::             -D for compatibility
  271. * f::             -f to work faster
  272. * I::             -I for .include search path
  273. * K::             -K for difference tables
  274. * L::             -L to retain local labels
  275. * o::             -o to name the object file
  276. * R::             -R to join data and text sections
  277. * v::             -v to announce version
  278. * W::             -W to suppress warnings
  279. File: as,  Node: a,  Next: D,  Up: Invoking
  280. Enable Listings: `-a[dhlns]'
  281. ============================
  282.    These options enable listing output from the assembler.  By itself,
  283. `-a' requests high-level, assembly, and symbols listing.  Other letters
  284. may be used to select specific options for the list: `-ah' requests a
  285. high-level language listing, `-al' requests an output-program assembly
  286. listing, and `-as' requests a symbol table listing.  High-level
  287. listings require that a compiler debugging option like `-g' be used,
  288. and that assembly listings (`-al') be requested also.
  289.    The `-ad' option may be used to omit debugging pseudo-ops from the
  290. listing.
  291.    Once you have specified one of these options, you can further control
  292. listing output and its appearance using the directives `.list',
  293. `.nolist', `.psize', `.eject', `.title', and `.sbttl'.  The `-an'
  294. option turns off all forms processing.  If you do not request listing
  295. output with one of the `-a' options, the listing-control directives
  296. have no effect.
  297.    The letters after `-a' may be combined into one option, *e.g.*,
  298. `-aln'.
  299. File: as,  Node: D,  Next: f,  Prev: a,  Up: Invoking
  300.    This option has no effect whatsoever, but it is accepted to make it
  301. more likely that scripts written for other assemblers will also work
  302. with `as'.
  303. File: as,  Node: f,  Next: I,  Prev: D,  Up: Invoking
  304. Work Faster: `-f'
  305. =================
  306.    `-f' should only be used when assembling programs written by a
  307. (trusted) compiler.  `-f' stops the assembler from doing whitespace and
  308. comment pre-processing on the input file(s) before assembling them.
  309. *Note Pre-processing: Pre-processing.
  310.      *Warning:* if the files actually need to be pre-processed (if they
  311.      contain comments, for example), `as' will not work correctly if
  312.      `-f' is used.
  313. File: as,  Node: I,  Next: K,  Prev: f,  Up: Invoking
  314. `.include' search path: `-I' PATH
  315. =================================
  316.    Use this option to add a PATH to the list of directories `as' will
  317. search for files specified in `.include' directives (*note `.include':
  318. Include.).  You may use `-I' as many times as necessary to include a
  319. variety of paths.  The current working directory is always searched
  320. first; after that, `as' searches any `-I' directories in the same order
  321. as they were specified (left to right) on the command line.
  322. File: as,  Node: K,  Next: L,  Prev: I,  Up: Invoking
  323. Difference Tables: `-K'
  324. =======================
  325.    `as' sometimes alters the code emitted for directives of the form
  326. `.word SYM1-SYM2'; *note `.word': Word..  You can use the `-K' option
  327. if you want a warning issued when this is done.
  328. File: as,  Node: L,  Next: o,  Prev: K,  Up: Invoking
  329. Include Local Labels: `-L'
  330. ==========================
  331.    Labels beginning with `L' (upper case only) are called "local
  332. labels". *Note Symbol Names::.  Normally you don't see such labels when
  333. debugging, because they are intended for the use of programs (like
  334. compilers) that compose assembler programs, not for your notice.
  335. Normally both `as' and `ld' discard such labels, so you don't normally
  336. debug with them.
  337.    This option tells `as' to retain those `L...' symbols in the object
  338. file.  Usually if you do this you also tell the linker `ld' to preserve
  339. symbols whose names begin with `L'.
  340. File: as,  Node: o,  Next: R,  Prev: L,  Up: Invoking
  341. Name the Object File: `-o'
  342. ==========================
  343.    There is always one object file output when you run `as'.  By
  344. default it has the name `a.out' (or `b.out', for Intel 960 targets
  345. only).  You use this option (which takes exactly one filename) to give
  346. the object file a different name.
  347.    Whatever the object file is called, `as' will overwrite any existing
  348. file of the same name.
  349. File: as,  Node: R,  Next: v,  Prev: o,  Up: Invoking
  350. Join Data and Text Sections: `-R'
  351. =================================
  352.    `-R' tells `as' to write the object file as if all data-section data
  353. lives in the text section.  This is only done at the very last moment:
  354. your binary data are the same, but data section parts are relocated
  355. differently.  The data section part of your object file is zero bytes
  356. long because all its bytes are appended to the text section.  (*Note
  357. Sections and Relocation: Sections.)
  358.    When you specify `-R' it would be possible to generate shorter
  359. address displacements (because we don't have to cross between text and
  360. data section).  We refrain from doing this simply for compatibility with
  361. older versions of `as'.  In future, `-R' may work this way.
  362.    When `as' is configured for COFF output, this option is only useful
  363. if you use sections named `.text' and `.data'.
  364. File: as,  Node: v,  Next: W,  Prev: R,  Up: Invoking
  365. Announce Version: `-v'
  366. ======================
  367.    You can find out what version of as is running by including the
  368. option `-v' (which you can also spell as `-version') on the command
  369. line.
  370. File: as,  Node: W,  Prev: v,  Up: Invoking
  371. Suppress Warnings: `-W'
  372. =======================
  373.    `as' should never give a warning or error message when assembling
  374. compiler output.  But programs written by people often cause `as' to
  375. give a warning that a particular assumption was made.  All such
  376. warnings are directed to the standard error file.  If you use this
  377. option, no warnings are issued.  This option only affects the warning
  378. messages: it does not change any particular of how `as' assembles your
  379. file.  Errors, which stop the assembly, are still reported.
  380. File: as,  Node: Syntax,  Next: Sections,  Prev: Invoking,  Up: Top
  381. Syntax
  382. ******
  383.    This chapter describes the machine-independent syntax allowed in a
  384. source file.  `as' syntax is similar to what many other assemblers use;
  385. it is inspired by the BSD 4.2 assembler, except that `as' does not
  386. assemble Vax bit-fields.
  387. * Menu:
  388. * Pre-processing::              Pre-processing
  389. * Whitespace::                  Whitespace
  390. * Comments::                    Comments
  391. * Symbol Intro::                Symbols
  392. * Statements::                  Statements
  393. * Constants::                   Constants
  394. File: as,  Node: Pre-processing,  Next: Whitespace,  Up: Syntax
  395. Pre-Processing
  396. ==============
  397.    The `as' internal pre-processor:
  398.    * adjusts and removes extra whitespace.  It leaves one space or tab
  399.      before the keywords on a line, and turns any other whitespace on
  400.      the line into a single space.
  401.    * removes all comments, replacing them with a single space, or an
  402.      appropriate number of newlines.
  403.    * converts character constants into the appropriate numeric values.
  404.    Note that it does not do macro processing, include file handling, or
  405. anything else you may get from your C compiler's pre-processor.  You can
  406. do include file processing with the `.include' directive (*note
  407. `.include': Include.).  Other "CPP" style pre-processing can be done
  408. with the GNU C compiler, by giving the input file a `.S' suffix; see
  409. the compiler documentation for details.
  410.    Excess whitespace, comments, and character constants cannot be used
  411. in the portions of the input text that are not pre-processed.
  412.    If the first line of an input file is `#NO_APP' or the `-f' option
  413. is given, the input file will not be pre-processed.  Within such an
  414. input file, parts of the file can be pre-processed by putting a line
  415. that says `#APP' before the text that should be pre-processed, and
  416. putting a line that says `#NO_APP' after them.  This feature is mainly
  417. intend to support `asm' statements in compilers whose output normally
  418. does not need to be pre-processed.
  419. File: as,  Node: Whitespace,  Next: Comments,  Prev: Pre-processing,  Up: Syntax
  420. Whitespace
  421. ==========
  422.    "Whitespace" is one or more blanks or tabs, in any order.
  423. Whitespace is used to separate symbols, and to make programs neater for
  424. people to read.  Unless within character constants (*note Character
  425. Constants: Characters.), any whitespace means the same as exactly one
  426. space.
  427. File: as,  Node: Comments,  Next: Symbol Intro,  Prev: Whitespace,  Up: Syntax
  428. Comments
  429. ========
  430.    There are two ways of rendering comments to `as'.  In both cases the
  431. comment is equivalent to one space.
  432.    Anything from `/*' through the next `*/' is a comment.  This means
  433. you may not nest these comments.
  434.      /*
  435.        The only way to include a newline ('\n') in a comment
  436.        is to use this sort of comment.
  437.      */
  438.      
  439.      /* This sort of comment does not nest. */
  440.    Anything from the "line comment" character to the next newline is
  441. considered a comment and is ignored.  The line comment character is `#'
  442. on the Vax; `#' on the i960; `!' on the SPARC; `|' on the 680x0; `;'
  443. for the AMD 29K family; `;' for the H8/300 family; `!' for the H8/500
  444. family; `!' for the Hitachi SH; `!' for the Z8000; see *Note Machine
  445. Dependencies::.
  446.    On some machines there are two different line comment characters.
  447. One will only begin a comment if it is the first non-whitespace
  448. character on a line, while the other will always begin a comment.
  449.    To be compatible with past assemblers, a special interpretation is
  450. given to lines that begin with `#'.  Following the `#' an absolute
  451. expression (*note Expressions::.) is expected:  this will be the
  452. logical line number of the next line.  Then a string (*Note Strings::.)
  453. is allowed: if present it is a new logical file name.  The rest of the
  454. line, if any, should be whitespace.
  455.    If the first non-whitespace characters on the line are not numeric,
  456. the line is ignored.  (Just like a comment.)
  457.                                # This is an ordinary comment.
  458.      # 42-6 "new_file_name"    # New logical file name
  459.                                # This is logical line # 36.
  460.    This feature is deprecated, and may disappear from future versions
  461. of `as'.
  462. File: as,  Node: Symbol Intro,  Next: Statements,  Prev: Comments,  Up: Syntax
  463. Symbols
  464. =======
  465.    A "symbol" is one or more characters chosen from the set of all
  466. letters (both upper and lower case), digits and the three characters
  467. `_.$'.  On most machines, you can also use `$' in symbol names;
  468. exceptions are noted in *Note Machine Dependencies::.  No symbol may
  469. begin with a digit.  Case is significant.  There is no length limit:
  470. all characters are significant.  Symbols are delimited by characters
  471. not in that set, or by the beginning of a file (since the source
  472. program must end with a newline, the end of a file is not a possible
  473. symbol delimiter).  *Note Symbols::.
  474. File: as,  Node: Statements,  Next: Constants,  Prev: Symbol Intro,  Up: Syntax
  475. Statements
  476. ==========
  477.    A "statement" ends at a newline character (`\n') or line separator
  478. character.  (The line separator is usually `;', unless this conflicts
  479. with the comment character; *note Machine Dependencies::..)  The
  480. newline or separator character is considered part of the preceding
  481. statement.  Newlines and separators within character constants are an
  482. exception: they don't end statements.
  483.    It is an error to end any statement with end-of-file:  the last
  484. character of any input file should be a newline.
  485.    You may write a statement on more than one line if you put a
  486. backslash (`\') immediately in front of any newlines within the
  487. statement.  When `as' reads a backslashed newline both characters are
  488. ignored.  You can even put backslashed newlines in the middle of symbol
  489. names without changing the meaning of your source program.
  490.    An empty statement is allowed, and may include whitespace.  It is
  491. ignored.
  492.    A statement begins with zero or more labels, optionally followed by a
  493. key symbol which determines what kind of statement it is.  The key
  494. symbol determines the syntax of the rest of the statement.  If the
  495. symbol begins with a dot `.' then the statement is an assembler
  496. directive: typically valid for any computer.  If the symbol begins with
  497. a letter the statement is an assembly language "instruction": it will
  498. assemble into a machine language instruction.  Different versions of
  499. `as' for different computers will recognize different instructions.  In
  500. fact, the same symbol may represent a different instruction in a
  501. different computer's assembly language.
  502.    A label is a symbol immediately followed by a colon (`:').
  503. Whitespace before a label or after a colon is permitted, but you may not
  504. have whitespace between a label's symbol and its colon. *Note Labels::.
  505.      label:     .directive    followed by something
  506.      another_label:           # This is an empty statement.
  507.                 instruction   operand_1, operand_2, ...
  508. File: as,  Node: Constants,  Prev: Statements,  Up: Syntax
  509. Constants
  510. =========
  511.    A constant is a number, written so that its value is known by
  512. inspection, without knowing any context.  Like this:
  513.      .byte  74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value.
  514.      .ascii "Ring the bell\7"                  # A string constant.
  515.      .octa  0x123456789abcdef0123456789ABCDEF0 # A bignum.
  516.      .float 0f-314159265358979323846264338327\
  517.      95028841971.693993751E-40                 # - pi, a flonum.
  518. * Menu:
  519. * Characters::                  Character Constants
  520. * Numbers::                     Number Constants
  521. File: as,  Node: Characters,  Next: Numbers,  Up: Constants
  522. Character Constants
  523. -------------------
  524.    There are two kinds of character constants.  A "character" stands
  525. for one character in one byte and its value may be used in numeric
  526. expressions.  String constants (properly called string *literals*) are
  527. potentially many bytes and their values may not be used in arithmetic
  528. expressions.
  529. * Menu:
  530. * Strings::                     Strings
  531. * Chars::                       Characters
  532. File: as,  Node: Strings,  Next: Chars,  Up: Characters
  533. Strings
  534. .......
  535.    A "string" is written between double-quotes.  It may contain
  536. double-quotes or null characters.  The way to get special characters
  537. into a string is to "escape" these characters: precede them with a
  538. backslash `\' character.  For example `\\' represents one backslash:
  539. the first `\' is an escape which tells `as' to interpret the second
  540. character literally as a backslash (which prevents `as' from
  541. recognizing the second `\' as an escape character).  The complete list
  542. of escapes follows.
  543.      Mnemonic for backspace; for ASCII this is octal code 010.
  544.      Mnemonic for FormFeed; for ASCII this is octal code 014.
  545.      Mnemonic for newline; for ASCII this is octal code 012.
  546.      Mnemonic for carriage-Return; for ASCII this is octal code 015.
  547.      Mnemonic for horizontal Tab; for ASCII this is octal code 011.
  548. `\ DIGIT DIGIT DIGIT'
  549.      An octal character code.  The numeric code is 3 octal digits.  For
  550.      compatibility with other Unix systems, 8 and 9 are accepted as
  551.      digits: for example, `\008' has the value 010, and `\009' the
  552.      value 011.
  553.      Represents one `\' character.
  554.      Represents one `"' character.  Needed in strings to represent this
  555.      character, because an unescaped `"' would end the string.
  556. `\ ANYTHING-ELSE'
  557.      Any other character when escaped by `\' will give a warning, but
  558.      assemble as if the `\' was not present.  The idea is that if you
  559.      used an escape sequence you clearly didn't want the literal
  560.      interpretation of the following character.  However `as' has no
  561.      other interpretation, so `as' knows it is giving you the wrong
  562.      code and warns you of the fact.
  563.    Which characters are escapable, and what those escapes represent,
  564. varies widely among assemblers.  The current set is what we think the
  565. BSD 4.2 assembler recognizes, and is a subset of what most C compilers
  566. recognize.  If you are in doubt, don't use an escape sequence.
  567. File: as,  Node: Chars,  Prev: Strings,  Up: Characters
  568. Characters
  569. ..........
  570.    A single character may be written as a single quote immediately
  571. followed by that character.  The same escapes apply to characters as to
  572. strings.  So if you want to write the character backslash, you must
  573. write `'\\' where the first `\' escapes the second `\'.  As you can
  574. see, the quote is an acute accent, not a grave accent.  A newline
  575. immediately following an acute accent is taken as a literal character
  576. and does not count as the end of a statement.  The value of a character
  577. constant in a numeric expression is the machine's byte-wide code for
  578. that character.  `as' assumes your character code is ASCII: `'A' means
  579. 65, `'B' means 66, and so on.
  580. File: as,  Node: Numbers,  Prev: Characters,  Up: Constants
  581. Number Constants
  582. ----------------
  583.    `as' distinguishes three kinds of numbers according to how they are
  584. stored in the target machine.  *Integers* are numbers that would fit
  585. into an `int' in the C language.  *Bignums* are integers, but they are
  586. stored in more than 32 bits.  *Flonums* are floating point numbers,
  587. described below.
  588. * Menu:
  589. * Integers::                    Integers
  590. * Bignums::                     Bignums
  591. * Flonums::                     Flonums
  592. File: as,  Node: Integers,  Next: Bignums,  Up: Numbers
  593. Integers
  594. ........
  595.    A binary integer is `0b' or `0B' followed by zero or more of the
  596. binary digits `01'.
  597.    An octal integer is `0' followed by zero or more of the octal digits
  598. (`01234567').
  599.    A decimal integer starts with a non-zero digit followed by zero or
  600. more digits (`0123456789').
  601.    A hexadecimal integer is `0x' or `0X' followed by one or more
  602. hexadecimal digits chosen from `0123456789abcdefABCDEF'.
  603.    Integers have the usual values.  To denote a negative integer, use
  604. the prefix operator `-' discussed under expressions (*note Prefix
  605. Operators: Prefix Ops.).
  606. File: as,  Node: Bignums,  Next: Flonums,  Prev: Integers,  Up: Numbers
  607. Bignums
  608. .......
  609.    A "bignum" has the same syntax and semantics as an integer except
  610. that the number (or its negative) takes more than 32 bits to represent
  611. in binary.  The distinction is made because in some places integers are
  612. permitted while bignums are not.
  613. File: as,  Node: Flonums,  Prev: Bignums,  Up: Numbers
  614. Flonums
  615. .......
  616.    A "flonum" represents a floating point number.  The translation is
  617. indirect: a decimal floating point number from the text is converted by
  618. `as' to a generic binary floating point number of more than sufficient
  619. precision.  This generic floating point number is converted to a
  620. particular computer's floating point format (or formats) by a portion
  621. of `as' specialized to that computer.
  622.    A flonum is written by writing (in order)
  623.    * The digit `0'.
  624.    * A letter, to tell `as' the rest of the number is a flonum.  `e' is
  625.      recommended.  Case is not important.
  626.      On the H8/300, H8/500, Hitachi SH, and AMD 29K architectures, the
  627.      letter must be one of the letters `DFPRSX' (in upper or lower
  628.      case).
  629.      On the Intel 960 architecture, the letter must be one of the
  630.      letters `DFT' (in upper or lower case).
  631.    * An optional sign: either `+' or `-'.
  632.    * An optional "integer part": zero or more decimal digits.
  633.    * An optional "fractional part": `.' followed by zero or more
  634.      decimal digits.
  635.    * An optional exponent, consisting of:
  636.         * An `E' or `e'.
  637.         * Optional sign: either `+' or `-'.
  638.         * One or more decimal digits.
  639.    At least one of the integer part or the fractional part must be
  640. present.  The floating point number has the usual base-10 value.
  641.    `as' does all processing using integers.  Flonums are computed
  642. independently of any floating point hardware in the computer running
  643. `as'.
  644. File: as,  Node: Sections,  Next: Symbols,  Prev: Syntax,  Up: Top
  645. Sections and Relocation
  646. ***********************
  647. * Menu:
  648. * Secs Background::             Background
  649. * Ld Sections::                 ld Sections
  650. * As Sections::                 as Internal Sections
  651. * Sub-Sections::                Sub-Sections
  652. * bss::                         bss Section
  653. File: as,  Node: Secs Background,  Next: Ld Sections,  Up: Sections
  654. Background
  655. ==========
  656.    Roughly, a section is a range of addresses, with no gaps; all data
  657. "in" those addresses is treated the same for some particular purpose.
  658. For example there may be a "read only" section.
  659.    The linker `ld' reads many object files (partial programs) and
  660. combines their contents to form a runnable program.  When `as' emits an
  661. object file, the partial program is assumed to start at address 0.
  662. `ld' will assign the final addresses the partial program occupies, so
  663. that different partial programs don't overlap.  This is actually an
  664. over-simplification, but it will suffice to explain how `as' uses
  665. sections.
  666.    `ld' moves blocks of bytes of your program to their run-time
  667. addresses.  These blocks slide to their run-time addresses as rigid
  668. units; their length does not change and neither does the order of bytes
  669. within them.  Such a rigid unit is called a *section*.  Assigning
  670. run-time addresses to sections is called "relocation".  It includes the
  671. task of adjusting mentions of object-file addresses so they refer to
  672. the proper run-time addresses.  For the H8/300 and H8/500, and for the
  673. Hitachi SH, `as' pads sections if needed to ensure they end on a word
  674. (sixteen bit) boundary.
  675.    An object file written by `as' has at least three sections, any of
  676. which may be empty.  These are named "text", "data" and "bss" sections.
  677.    When it generates COFF output, `as' can also generate whatever other
  678. named sections you specify using the `.section' directive (*note
  679. `.section': Section.).  If you don't use any directives that place
  680. output in the `.text' or `.data' sections, these sections will still
  681. exist, but will be empty.
  682.    Within the object file, the text section starts at address `0', the
  683. data section follows, and the bss section follows the data section.
  684.    To let `ld' know which data will change when the sections are
  685. relocated, and how to change that data, `as' also writes to the object
  686. file details of the relocation needed.  To perform relocation `ld' must
  687. know, each time an address in the object file is mentioned:
  688.    * Where in the object file is the beginning of this reference to an
  689.      address?
  690.    * How long (in bytes) is this reference?
  691.    * Which section does the address refer to?  What is the numeric
  692.      value of
  693.           (ADDRESS) - (START-ADDRESS OF SECTION)?
  694.    * Is the reference to an address "Program-Counter relative"?
  695.    In fact, every address `as' ever uses is expressed as
  696.      (SECTION) + (OFFSET INTO SECTION)
  697. Further, every expression `as' computes is of this section-relative
  698. nature.  "Absolute expression" means an expression with section
  699. "absolute" (*note Ld Sections::.).  A "pass1 expression" means an
  700. expression with section "pass1" (*note as Internal Sections: As
  701. Sections.).  In this manual we use the notation {SECNAME N} to mean
  702. "offset N into section SECNAME".
  703.    Apart from text, data and bss sections you need to know about the
  704. "absolute" section.  When `ld' mixes partial programs, addresses in the
  705. absolute section remain unchanged.  For example, address `{absolute 0}'
  706. is "relocated" to run-time address 0 by `ld'.  Although two partial
  707. programs' data sections will not overlap addresses after linking, *by
  708. definition* their absolute sections will overlap.  Address `{absolute
  709. 239}' in one partial program will always be the same address when the
  710. program is running as address `{absolute 239}' in any other partial
  711. program.
  712.    The idea of sections is extended to the "undefined" section.  Any
  713. address whose section is unknown at assembly time is by definition
  714. rendered {undefined U}--where U will be filled in later.  Since numbers
  715. are always defined, the only way to generate an undefined address is to
  716. mention an undefined symbol.  A reference to a named common block would
  717. be such a symbol: its value is unknown at assembly time so it has
  718. section *undefined*.
  719.    By analogy the word *section* is used to describe groups of sections
  720. in the linked program.  `ld' puts all partial programs' text sections
  721. in contiguous addresses in the linked program.  It is customary to
  722. refer to the *text section* of a program, meaning all the addresses of
  723. all partial program's text sections.  Likewise for data and bss
  724. sections.
  725.    Some sections are manipulated by `ld'; others are invented for use
  726. of `as' and have no meaning except during assembly.
  727. File: as,  Node: Ld Sections,  Next: As Sections,  Prev: Secs Background,  Up: Sections
  728. ld Sections
  729. ===========
  730.    `ld' deals with just four kinds of sections, summarized below.
  731. *named sections*
  732. *text section*
  733. *data section*
  734.      These sections hold your program.  `as' and `ld' treat them as
  735.      separate but equal sections.  Anything you can say of one section
  736.      is true another.  When the program is running, however, it is
  737.      customary for the text section to be unalterable.  The text
  738.      section is often shared among processes: it will contain
  739.      instructions, constants and the like.  The data section of a
  740.      running program is usually alterable: for example, C variables
  741.      would be stored in the data section.
  742. *bss section*
  743.      This section contains zeroed bytes when your program begins
  744.      running.  It is used to hold unitialized variables or common
  745.      storage.  The length of each partial program's bss section is
  746.      important, but because it starts out containing zeroed bytes there
  747.      is no need to store explicit zero bytes in the object file.  The
  748.      bss section was invented to eliminate those explicit zeros from
  749.      object files.
  750. *absolute section*
  751.      Address 0 of this section is always "relocated" to runtime address
  752.      0.  This is useful if you want to refer to an address that `ld'
  753.      must not change when relocating.  In this sense we speak of
  754.      absolute addresses being "unrelocatable": they don't change during
  755.      relocation.
  756. *undefined section*
  757.      This "section" is a catch-all for address references to objects
  758.      not in the preceding sections.
  759.    An idealized example of three relocatable sections follows.  The
  760. example uses the traditional section names `.text' and `.data'.  Memory
  761. addresses are on the horizontal axis.
  762.                            +-----+----+--+
  763.      partial program # 1:  |ttttt|dddd|00|
  764.                            +-----+----+--+
  765.      
  766.                            text   data bss
  767.                            seg.   seg. seg.
  768.      
  769.                            +---+---+---+
  770.      partial program # 2:  |TTT|DDD|000|
  771.                            +---+---+---+
  772.      
  773.                            +--+---+-----+--+----+---+-----+~~
  774.      linked program:       |  |TTT|ttttt|  |dddd|DDD|00000|
  775.                            +--+---+-----+--+----+---+-----+~~
  776.      
  777.          addresses:        0 ...
  778. File: as,  Node: As Sections,  Next: Sub-Sections,  Prev: Ld Sections,  Up: Sections
  779. as Internal Sections
  780. ====================
  781.    These sections are meant only for the internal use of `as'.  They
  782. have no meaning at run-time.  You don't really need to know about these
  783. sections for most purposes; but they can be mentioned in `as' warning
  784. messages, so it might be helpful to have an idea of their meanings to
  785. `as'.  These sections are used to permit the value of every expression
  786. in your assembly language program to be a section-relative address.
  787. ASSEMBLER-INTERNAL-LOGIC-ERROR!
  788.      An internal assembler logic error has been found.  This means
  789.      there is a bug in the assembler.
  790. expr section
  791.      The assembler stores complex expression internally as combinations
  792.      of symbols.  When it needs to represent an expression as a symbol,
  793.      it puts it in the expr section.
  794. File: as,  Node: Sub-Sections,  Next: bss,  Prev: As Sections,  Up: Sections
  795. Sub-Sections
  796. ============
  797.    Assembled bytes conventionally fall into two sections: text and data.
  798. You may have separate groups of data in named sections that you want to
  799. end up near to each other in the object file, even though they are not
  800. contiguous in the assembler source.  `as' allows you to use
  801. "subsections" for this purpose.  Within each section, there can be
  802. numbered subsections with values from 0 to 8192.  Objects assembled
  803. into the same subsection will be grouped with other objects in the same
  804. subsection when they are all put into the object file.  For example, a
  805. compiler might want to store constants in the text section, but might
  806. not want to have them interspersed with the program being assembled.
  807. In this case, the compiler could issue a `.text 0' before each section
  808. of code being output, and a `.text 1' before each group of constants
  809. being output.
  810.    Subsections are optional.  If you don't use subsections, everything
  811. will be stored in subsection number zero.
  812.    Each subsection is zero-padded up to a multiple of four bytes.
  813. (Subsections may be padded a different amount on different flavors of
  814. `as'.)
  815.    Subsections appear in your object file in numeric order, lowest
  816. numbered to highest.  (All this to be compatible with other people's
  817. assemblers.) The object file contains no representation of subsections;
  818. `ld' and other programs that manipulate object files will see no trace
  819. of them.  They just see all your text subsections as a text section,
  820. and all your data subsections as a data section.
  821.    To specify which subsection you want subsequent statements assembled
  822. into, use a numeric argument to specify it, in a `.text EXPRESSION' or
  823. a `.data EXPRESSION' statement.  When generating COFF output, you can
  824. also use an extra subsection argument with arbitrary named sections:
  825. `.section NAME, EXPRESSION'.  EXPRESSION should be an absolute
  826. expression.  (*Note Expressions::.)  If you just say `.text' then
  827. `.text 0' is assumed.  Likewise `.data' means `.data 0'.  Assembly
  828. begins in `text 0'.  For instance:
  829.      .text 0     # The default subsection is text 0 anyway.
  830.      .ascii "This lives in the first text subsection. *"
  831.      .text 1
  832.      .ascii "But this lives in the second text subsection."
  833.      .data 0
  834.      .ascii "This lives in the data section,"
  835.      .ascii "in the first data subsection."
  836.      .text 0
  837.      .ascii "This lives in the first text section,"
  838.      .ascii "immediately following the asterisk (*)."
  839.    Each section has a "location counter" incremented by one for every
  840. byte assembled into that section.  Because subsections are merely a
  841. convenience restricted to `as' there is no concept of a subsection
  842. location counter.  There is no way to directly manipulate a location
  843. counter--but the `.align' directive will change it, and any label
  844. definition will capture its current value.  The location counter of the
  845. section that statements are being assembled into is said to be the
  846. "active" location counter.
  847. File: as,  Node: bss,  Prev: Sub-Sections,  Up: Sections
  848. bss Section
  849. ===========
  850.    The bss section is used for local common variable storage.  You may
  851. allocate address space in the bss section, but you may not dictate data
  852. to load into it before your program executes.  When your program starts
  853. running, all the contents of the bss section are zeroed bytes.
  854.    Addresses in the bss section are allocated with special directives;
  855. you may not assemble anything directly into the bss section.  Hence
  856. there are no bss subsections. *Note `.comm': Comm, *note `.lcomm':
  857. Lcomm..
  858. File: as,  Node: Symbols,  Next: Expressions,  Prev: Sections,  Up: Top
  859. Symbols
  860. *******
  861.    Symbols are a central concept: the programmer uses symbols to name
  862. things, the linker uses symbols to link, and the debugger uses symbols
  863. to debug.
  864.      *Warning:* `as' does not place symbols in the object file in the
  865.      same order they were declared.  This may break some debuggers.
  866. * Menu:
  867. * Labels::                      Labels
  868. * Setting Symbols::             Giving Symbols Other Values
  869. * Symbol Names::                Symbol Names
  870. * Dot::                         The Special Dot Symbol
  871. * Symbol Attributes::           Symbol Attributes
  872. File: as,  Node: Labels,  Next: Setting Symbols,  Up: Symbols
  873. Labels
  874. ======
  875.    A "label" is written as a symbol immediately followed by a colon
  876. `:'.  The symbol then represents the current value of the active
  877. location counter, and is, for example, a suitable instruction operand.
  878. You are warned if you use the same symbol to represent two different
  879. locations: the first definition overrides any other definitions.
  880. File: as,  Node: Setting Symbols,  Next: Symbol Names,  Prev: Labels,  Up: Symbols
  881. Giving Symbols Other Values
  882. ===========================
  883.    A symbol can be given an arbitrary value by writing a symbol,
  884. followed by an equals sign `=', followed by an expression (*note
  885. Expressions::.).  This is equivalent to using the `.set' directive.
  886. *Note `.set': Set.
  887. File: as,  Node: Symbol Names,  Next: Dot,  Prev: Setting Symbols,  Up: Symbols
  888. Symbol Names
  889. ============
  890.    Symbol names begin with a letter or with one of `._'.  On most
  891. machines, you can also use `$' in symbol names; exceptions are noted in
  892. *Note Machine Dependencies::.  That character may be followed by any
  893. string of digits, letters, dollar signs (unless otherwise noted in
  894. *Note Machine Dependencies::), and underscores.  For the AMD 29K
  895. family, `?' is also allowed in the body of a symbol name, though not at
  896. its beginning.
  897.    Case of letters is significant: `foo' is a different symbol name
  898. than `Foo'.
  899.    Each symbol has exactly one name. Each name in an assembly language
  900. program refers to exactly one symbol. You may use that symbol name any
  901. number of times in a program.
  902. Local Symbol Names
  903. ------------------
  904.    Local symbols help compilers and programmers use names temporarily.
  905. There are ten local symbol names, which are re-used throughout the
  906. program.  You may refer to them using the names `0' `1' ... `9'.  To
  907. define a local symbol, write a label of the form `N:' (where N
  908. represents any digit).  To refer to the most recent previous definition
  909. of that symbol write `Nb', using the same digit as when you defined the
  910. label.  To refer to the next definition of a local label, write
  911. `Nf'--where N gives you a choice of 10 forward references.  The `b'
  912. stands for "backwards" and the `f' stands for "forwards".
  913.    Local symbols are not emitted by the current GNU C compiler.
  914.    There is no restriction on how you can use these labels, but
  915. remember that at any point in the assembly you can refer to at most 10
  916. prior local labels and to at most 10 forward local labels.
  917.    Local symbol names are only a notation device.  They are immediately
  918. transformed into more conventional symbol names before the assembler
  919. uses them.  The symbol names stored in the symbol table, appearing in
  920. error messages and optionally emitted to the object file have these
  921. parts:
  922.      All local labels begin with `L'. Normally both `as' and `ld'
  923.      forget symbols that start with `L'. These labels are used for
  924.      symbols you are never intended to see.  If you give the `-L'
  925.      option then `as' will retain these symbols in the object file. If
  926.      you also instruct `ld' to retain these symbols, you may use them
  927.      in debugging.
  928. `DIGIT'
  929.      If the label is written `0:' then the digit is `0'.  If the label
  930.      is written `1:' then the digit is `1'.  And so on up through `9:'.
  931.      This unusual character is included so you don't accidentally invent
  932.      a symbol of the same name.  The character has ASCII value `\001'.
  933. `*ordinal number*'
  934.      This is a serial number to keep the labels distinct.  The first
  935.      `0:' gets the number `1'; The 15th `0:' gets the number `15';
  936.      *etc.*.  Likewise for the other labels `1:' through `9:'.
  937.    For instance, the first `1:' is named `L
  938. A1', the 44th `3:' is named
  939. A44'.
  940. File: as,  Node: Dot,  Next: Symbol Attributes,  Prev: Symbol Names,  Up: Symbols
  941. The Special Dot Symbol
  942. ======================
  943.    The special symbol `.' refers to the current address that `as' is
  944. assembling into.  Thus, the expression `melvin: .long .' will cause
  945. `melvin' to contain its own address.  Assigning a value to `.' is
  946. treated the same as a `.org' directive.  Thus, the expression `.=.+4'
  947. is the same as saying `.space 4'.
  948. File: as,  Node: Symbol Attributes,  Prev: Dot,  Up: Symbols
  949. Symbol Attributes
  950. =================
  951.    Every symbol has, as well as its name, the attributes "Value" and
  952. "Type".  Depending on output format, symbols can also have auxiliary
  953. attributes.
  954.    If you use a symbol without defining it, `as' assumes zero for all
  955. these attributes, and probably won't warn you.  This makes the symbol
  956. an externally defined symbol, which is generally what you would want.
  957. * Menu:
  958. * Symbol Value::                Value
  959. * Symbol Type::                 Type
  960. * a.out Symbols::               Symbol Attributes: `a.out'
  961. * COFF Symbols::                Symbol Attributes for COFF
  962. File: as,  Node: Symbol Value,  Next: Symbol Type,  Up: Symbol Attributes
  963. Value
  964. -----
  965.    The value of a symbol is (usually) 32 bits.  For a symbol which
  966. labels a location in the text, data, bss or absolute sections the value
  967. is the number of addresses from the start of that section to the label.
  968. Naturally for text, data and bss sections the value of a symbol changes
  969. as `ld' changes section base addresses during linking.  Absolute
  970. symbols' values do not change during linking: that is why they are
  971. called absolute.
  972.    The value of an undefined symbol is treated in a special way.  If it
  973. is 0 then the symbol is not defined in this assembler source program,
  974. and `ld' will try to determine its value from other programs it is
  975. linked with.  You make this kind of symbol simply by mentioning a symbol
  976. name without defining it.  A non-zero value represents a `.comm' common
  977. declaration.  The value is how much common storage to reserve, in bytes
  978. (addresses).  The symbol refers to the first address of the allocated
  979. storage.
  980. File: as,  Node: Symbol Type,  Next: a.out Symbols,  Prev: Symbol Value,  Up: Symbol Attributes
  981.    The type attribute of a symbol contains relocation (section)
  982. information, any flag settings indicating that a symbol is external, and
  983. (optionally), other information for linkers and debuggers.  The exact
  984. format depends on the object-code output format in use.
  985. File: as,  Node: a.out Symbols,  Next: COFF Symbols,  Prev: Symbol Type,  Up: Symbol Attributes
  986. Symbol Attributes: `a.out'
  987. --------------------------
  988. * Menu:
  989. * Symbol Desc::                 Descriptor
  990. * Symbol Other::                Other
  991. File: as,  Node: Symbol Desc,  Next: Symbol Other,  Up: a.out Symbols
  992. Descriptor
  993. ..........
  994.    This is an arbitrary 16-bit value.  You may establish a symbol's
  995. descriptor value by using a `.desc' statement (*note `.desc': Desc.).
  996. A descriptor value means nothing to `as'.
  997. File: as,  Node: Symbol Other,  Prev: Symbol Desc,  Up: a.out Symbols
  998. Other
  999. .....
  1000.    This is an arbitrary 8-bit value.  It means nothing to `as'.
  1001. File: as,  Node: COFF Symbols,  Prev: a.out Symbols,  Up: Symbol Attributes
  1002. Symbol Attributes for COFF
  1003. --------------------------
  1004.    The COFF format supports a multitude of auxiliary symbol attributes;
  1005. like the primary symbol attributes, they are set between `.def' and
  1006. `.endef' directives.
  1007. Primary Attributes
  1008. ..................
  1009.    The symbol name is set with `.def'; the value and type,
  1010. respectively, with `.val' and `.type'.
  1011. Auxiliary Attributes
  1012. ....................
  1013.    The `as' directives `.dim', `.line', `.scl', `.size', and `.tag' can
  1014. generate auxiliary symbol table information for COFF.
  1015. File: as,  Node: Expressions,  Next: Pseudo Ops,  Prev: Symbols,  Up: Top
  1016. Expressions
  1017. ***********
  1018.    An "expression" specifies an address or numeric value.  Whitespace
  1019. may precede and/or follow an expression.
  1020. * Menu:
  1021. * Empty Exprs::                 Empty Expressions
  1022. * Integer Exprs::               Integer Expressions
  1023. File: as,  Node: Empty Exprs,  Next: Integer Exprs,  Up: Expressions
  1024. Empty Expressions
  1025. =================
  1026.    An empty expression has no value: it is just whitespace or null.
  1027. Wherever an absolute expression is required, you may omit the
  1028. expression and `as' will assume a value of (absolute) 0.  This is
  1029. compatible with other assemblers.
  1030. File: as,  Node: Integer Exprs,  Prev: Empty Exprs,  Up: Expressions
  1031. Integer Expressions
  1032. ===================
  1033.    An "integer expression" is one or more *arguments* delimited by
  1034. *operators*.
  1035. * Menu:
  1036. * Arguments::                   Arguments
  1037. * Operators::                   Operators
  1038. * Prefix Ops::                  Prefix Operators
  1039. * Infix Ops::                   Infix Operators
  1040. File: as,  Node: Arguments,  Next: Operators,  Up: Integer Exprs
  1041. Arguments
  1042. ---------
  1043.    "Arguments" are symbols, numbers or subexpressions.  In other
  1044. contexts arguments are sometimes called "arithmetic operands".  In this
  1045. manual, to avoid confusing them with the "instruction operands" of the
  1046. machine language, we use the term "argument" to refer to parts of
  1047. expressions only, reserving the word "operand" to refer only to machine
  1048. instruction operands.
  1049.    Symbols are evaluated to yield {SECTION NNN} where SECTION is one of
  1050. text, data, bss, absolute, or undefined.  NNN is a signed, 2's
  1051. complement 32 bit integer.
  1052.    Numbers are usually integers.
  1053.    A number can be a flonum or bignum.  In this case, you are warned
  1054. that only the low order 32 bits are used, and `as' pretends these 32
  1055. bits are an integer.  You may write integer-manipulating instructions
  1056. that act on exotic constants, compatible with other assemblers.
  1057.    Subexpressions are a left parenthesis `(' followed by an integer
  1058. expression, followed by a right parenthesis `)'; or a prefix operator
  1059. followed by an argument.
  1060. File: as,  Node: Operators,  Next: Prefix Ops,  Prev: Arguments,  Up: Integer Exprs
  1061. Operators
  1062. ---------
  1063.    "Operators" are arithmetic functions, like `+' or `%'.  Prefix
  1064. operators are followed by an argument.  Infix operators appear between
  1065. their arguments.  Operators may be preceded and/or followed by
  1066. whitespace.
  1067. File: as,  Node: Prefix Ops,  Next: Infix Ops,  Prev: Operators,  Up: Integer Exprs
  1068. Prefix Operator
  1069. ---------------
  1070.    `as' has the following "prefix operators".  They each take one
  1071. argument, which must be absolute.
  1072.      "Negation".  Two's complement negation.
  1073.      "Complementation".  Bitwise not.
  1074. File: as,  Node: Infix Ops,  Prev: Prefix Ops,  Up: Integer Exprs
  1075. Infix Operators
  1076. ---------------
  1077.    "Infix operators" take two arguments, one on either side.  Operators
  1078. have precedence, but operations with equal precedence are performed left
  1079. to right.  Apart from `+' or `-', both arguments must be absolute, and
  1080. the result is absolute.
  1081.   1. Highest Precedence
  1082.     `*'
  1083.           "Multiplication".
  1084.     `/'
  1085.           "Division".  Truncation is the same as the C operator `/'
  1086.     `%'
  1087.           "Remainder".
  1088.     `<'
  1089.     `<<'
  1090.           "Shift Left".  Same as the C operator `<<'.
  1091.     `>'
  1092.     `>>'
  1093.           "Shift Right".  Same as the C operator `>>'.
  1094.   2. Intermediate precedence
  1095.     `|'
  1096.           "Bitwise Inclusive Or".
  1097.     `&'
  1098.           "Bitwise And".
  1099.     `^'
  1100.           "Bitwise Exclusive Or".
  1101.     `!'
  1102.           "Bitwise Or Not".
  1103.   3. Lowest Precedence
  1104.     `+'
  1105.           "Addition".  If either argument is absolute, the result has
  1106.           the section of the other argument.  If either argument is
  1107.           pass1 or undefined, the result is pass1.  Otherwise `+' is
  1108.           illegal.
  1109.     `-'
  1110.           "Subtraction".  If the right argument is absolute, the result
  1111.           has the section of the left argument.  If either argument is
  1112.           pass1 the result is pass1.  If either argument is undefined
  1113.           the result is difference section.  If both arguments are in
  1114.           the same section, the result is absolute--provided that
  1115.           section is one of text, data or bss.  Otherwise subtraction
  1116.           is illegal.
  1117.    The sense of the rule for addition is that it's only meaningful to
  1118. add the *offsets* in an address; you can only have a defined section in
  1119. one of the two arguments.
  1120.    Similarly, you can't subtract quantities from two different sections.
  1121. File: as,  Node: Pseudo Ops,  Next: Machine Dependencies,  Prev: Expressions,  Up: Top
  1122. Assembler Directives
  1123. ********************
  1124.    All assembler directives have names that begin with a period (`.').
  1125. The rest of the name is letters, usually in lower case.
  1126.    This chapter discusses directives that are available regardless of
  1127. the target machine configuration for the GNU assembler.  Some machine
  1128. configurations provide additional directives.  *Note Machine
  1129. Dependencies::.
  1130. * Menu:
  1131. * Abort::                       `.abort'
  1132. * ABORT::                       `.ABORT'
  1133. * Align::                       `.align ABS-EXPR , ABS-EXPR'
  1134. * App-File::                    `.app-file STRING'
  1135. * Ascii::                       `.ascii "STRING"'...
  1136. * Asciz::                       `.asciz "STRING"'...
  1137. * Byte::                        `.byte EXPRESSIONS'
  1138. * Comm::                        `.comm SYMBOL , LENGTH '
  1139. * Data::                        `.data SUBSECTION'
  1140. * Def::                         `.def NAME'
  1141. * Desc::                        `.desc SYMBOL, ABS-EXPRESSION'
  1142. * Dim::                         `.dim'
  1143. * Double::                      `.double FLONUMS'
  1144. * Eject::                       `.eject'
  1145. * Else::                        `.else'
  1146. * Endef::                       `.endef'
  1147. * Endif::                       `.endif'
  1148. * Equ::                         `.equ SYMBOL, EXPRESSION'
  1149. * Extern::                      `.extern'
  1150. * File::                        `.file STRING'
  1151. * Fill::                        `.fill REPEAT , SIZE , VALUE'
  1152. * Float::                       `.float FLONUMS'
  1153. * Global::                      `.global SYMBOL', `.globl SYMBOL'
  1154. * hword::                       `.hword EXPRESSIONS'
  1155. * Ident::                       `.ident'
  1156. * If::                          `.if ABSOLUTE EXPRESSION'
  1157. * Include::                     `.include "FILE"'
  1158. * Int::                         `.int EXPRESSIONS'
  1159. * Lcomm::                       `.lcomm SYMBOL , LENGTH'
  1160. * Lflags::                      `.lflags'
  1161. * Line::                        `.line LINE-NUMBER'
  1162. * Ln::                          `.ln LINE-NUMBER'
  1163. * List::                        `.list'
  1164. * Long::                        `.long EXPRESSIONS'
  1165. * Nolist::                      `.nolist'
  1166. * Octa::                        `.octa BIGNUMS'
  1167. * Org::                         `.org NEW-LC , FILL'
  1168. * Psize::                       `.psize LINES, COLUMNS'
  1169. * Quad::                        `.quad BIGNUMS'
  1170. * Sbttl::                       `.sbttl "SUBHEADING"'
  1171. * Scl::                         `.scl CLASS'
  1172. * Section::                     `.section NAME, SUBSECTION'
  1173. * Set::                         `.set SYMBOL, EXPRESSION'
  1174. * Short::                       `.short EXPRESSIONS'
  1175. * Single::                      `.single FLONUMS'
  1176. * Size::                        `.size'
  1177. * Space::                       `.space SIZE , FILL'
  1178. * Stab::                        `.stabd, .stabn, .stabs'
  1179. * Tag::                         `.tag STRUCTNAME'
  1180. * Text::                        `.text SUBSECTION'
  1181. * Title::                       `.title "HEADING"'
  1182. * Type::                        `.type INT'
  1183. * Val::                         `.val ADDR'
  1184. * Word::                        `.word EXPRESSIONS'
  1185. * Deprecated::                  Deprecated Directives
  1186. File: as,  Node: Abort,  Next: ABORT,  Up: Pseudo Ops
  1187. `.abort'
  1188. ========
  1189.    This directive stops the assembly immediately.  It is for
  1190. compatibility with other assemblers.  The original idea was that the
  1191. assembly language source would be piped into the assembler.  If the
  1192. sender of the source quit, it could use this directive tells `as' to
  1193. quit also.  One day `.abort' will not be supported.
  1194. File: as,  Node: ABORT,  Next: Align,  Prev: Abort,  Up: Pseudo Ops
  1195. `.ABORT'
  1196. ========
  1197.    When producing COFF output, `as' accepts this directive as a synonym
  1198. for `.abort'.
  1199.    When producing `b.out' output, `as' accepts this directive, but
  1200. ignores it.
  1201. File: as,  Node: Align,  Next: App-File,  Prev: ABORT,  Up: Pseudo Ops
  1202. `.align ABS-EXPR , ABS-EXPR'
  1203. ============================
  1204.    Pad the location counter (in the current subsection) to a particular
  1205. storage boundary.  The first expression (which must be absolute) is the
  1206. number of low-order zero bits the location counter will have after
  1207. advancement.  For example `.align 3' will advance the location counter
  1208. until it a multiple of 8.  If the location counter is already a
  1209. multiple of 8, no change is needed.
  1210.    The second expression (also absolute) gives the value to be stored in
  1211. the padding bytes.  It (and the comma) may be omitted.  If it is
  1212. omitted, the padding bytes are zero.
  1213. File: as,  Node: App-File,  Next: Ascii,  Prev: Align,  Up: Pseudo Ops
  1214. `.app-file STRING'
  1215. ==================
  1216.    `.app-file' (which may also be spelled `.file') tells `as' that we
  1217. are about to start a new logical file.  STRING is the new file name.
  1218. In general, the filename is recognized whether or not it is surrounded
  1219. by quotes `"'; but if you wish to specify an empty file name is
  1220. permitted, you must give the quotes-`""'.  This statement may go away in
  1221. future: it is only recognized to be compatible with old `as' programs.
  1222. File: as,  Node: Ascii,  Next: Asciz,  Prev: App-File,  Up: Pseudo Ops
  1223. `.ascii "STRING"'...
  1224. ====================
  1225.    `.ascii' expects zero or more string literals (*note Strings::.)
  1226. separated by commas.  It assembles each string (with no automatic
  1227. trailing zero byte) into consecutive addresses.
  1228. File: as,  Node: Asciz,  Next: Byte,  Prev: Ascii,  Up: Pseudo Ops
  1229. `.asciz "STRING"'...
  1230. ====================
  1231.    `.asciz' is just like `.ascii', but each string is followed by a
  1232. zero byte.  The "z" in `.asciz' stands for "zero".
  1233. File: as,  Node: Byte,  Next: Comm,  Prev: Asciz,  Up: Pseudo Ops
  1234. `.byte EXPRESSIONS'
  1235. ===================
  1236.    `.byte' expects zero or more expressions, separated by commas.  Each
  1237. expression is assembled into the next byte.
  1238. File: as,  Node: Comm,  Next: Data,  Prev: Byte,  Up: Pseudo Ops
  1239. `.comm SYMBOL , LENGTH '
  1240. ========================
  1241.    `.comm' declares a named common area in the bss section.  Normally
  1242. `ld' reserves memory addresses for it during linking, so no partial
  1243. program defines the location of the symbol.  Use `.comm' to tell `ld'
  1244. that it must be at least LENGTH bytes long.  `ld' will allocate space
  1245. for each `.comm' symbol that is at least as long as the longest `.comm'
  1246. request in any of the partial programs linked.  LENGTH is an absolute
  1247. expression.
  1248. File: as,  Node: Data,  Next: Def,  Prev: Comm,  Up: Pseudo Ops
  1249. `.data SUBSECTION'
  1250. ==================
  1251.    `.data' tells `as' to assemble the following statements onto the end
  1252. of the data subsection numbered SUBSECTION (which is an absolute
  1253. expression).  If SUBSECTION is omitted, it defaults to zero.
  1254. File: as,  Node: Def,  Next: Desc,  Prev: Data,  Up: Pseudo Ops
  1255. `.def NAME'
  1256. ===========
  1257.    Begin defining debugging information for a symbol NAME; the
  1258. definition extends until the `.endef' directive is encountered.
  1259.    This directive is only observed when `as' is configured for COFF
  1260. format output; when producing `b.out', `.def' is recognized, but
  1261. ignored.
  1262. File: as,  Node: Desc,  Next: Dim,  Prev: Def,  Up: Pseudo Ops
  1263. `.desc SYMBOL, ABS-EXPRESSION'
  1264. ==============================
  1265.    This directive sets the descriptor of the symbol (*note Symbol
  1266. Attributes::.) to the low 16 bits of an absolute expression.
  1267.    The `.desc' directive is not available when `as' is configured for
  1268. COFF output; it is only for `a.out' or `b.out' object format.  For the
  1269. sake of compatibility, `as' will accept it, but produce no output, when
  1270. configured for COFF.
  1271. File: as,  Node: Dim,  Next: Double,  Prev: Desc,  Up: Pseudo Ops
  1272. `.dim'
  1273. ======
  1274.    This directive is generated by compilers to include auxiliary
  1275. debugging information in the symbol table.  It is only permitted inside
  1276. `.def'/`.endef' pairs.
  1277.    `.dim' is only meaningful when generating COFF format output; when
  1278. `as' is generating `b.out', it accepts this directive but ignores it.
  1279. File: as,  Node: Double,  Next: Eject,  Prev: Dim,  Up: Pseudo Ops
  1280. `.double FLONUMS'
  1281. =================
  1282.    `.double' expects zero or more flonums, separated by commas.  It
  1283. assembles floating point numbers.  The exact kind of floating point
  1284. numbers emitted depends on how `as' is configured.  *Note Machine
  1285. Dependencies::.
  1286. File: as,  Node: Eject,  Next: Else,  Prev: Double,  Up: Pseudo Ops
  1287. `.eject'
  1288. ========
  1289.    Force a page break at this point, when generating assembly listings.
  1290. File: as,  Node: Else,  Next: Endef,  Prev: Eject,  Up: Pseudo Ops
  1291. `.else'
  1292. =======
  1293.    `.else' is part of the `as' support for conditional assembly; *note
  1294. `.if': If..  It marks the beginning of a section of code to be
  1295. assembled if the condition for the preceding `.if' was false.
  1296. File: as,  Node: Endef,  Next: Endif,  Prev: Else,  Up: Pseudo Ops
  1297. `.endef'
  1298. ========
  1299.    This directive flags the end of a symbol definition begun with
  1300. `.def'.
  1301.    `.endef' is only meaningful when generating COFF format output; if
  1302. `as' is configured to generate `b.out', it accepts this directive but
  1303. ignores it.
  1304. File: as,  Node: Endif,  Next: Equ,  Prev: Endef,  Up: Pseudo Ops
  1305. `.endif'
  1306. ========
  1307.    `.endif' is part of the `as' support for conditional assembly; it
  1308. marks the end of a block of code that is only assembled conditionally.
  1309. *Note `.if': If.
  1310. File: as,  Node: Equ,  Next: Extern,  Prev: Endif,  Up: Pseudo Ops
  1311. `.equ SYMBOL, EXPRESSION'
  1312. =========================
  1313.    This directive sets the value of SYMBOL to EXPRESSION.  It is
  1314. synonymous with `.set'; *note `.set': Set..
  1315. File: as,  Node: Extern,  Next: File,  Prev: Equ,  Up: Pseudo Ops
  1316. `.extern'
  1317. =========
  1318.    `.extern' is accepted in the source program--for compatibility with
  1319. other assemblers--but it is ignored.  `as' treats all undefined symbols
  1320. as external.
  1321. File: as,  Node: File,  Next: Fill,  Prev: Extern,  Up: Pseudo Ops
  1322. `.file STRING'
  1323. ==============
  1324.    `.file' (which may also be spelled `.app-file') tells `as' that we
  1325. are about to start a new logical file.  STRING is the new file name.
  1326. In general, the filename is recognized whether or not it is surrounded
  1327. by quotes `"'; but if you wish to specify an empty file name, you must
  1328. give the quotes-`""'.  This statement may go away in future: it is only
  1329. recognized to be compatible with old `as' programs.  In some
  1330. configurations of `as', `.file' has already been removed to avoid
  1331. conflicts with other assemblers.  *Note Machine Dependencies::.
  1332. File: as,  Node: Fill,  Next: Float,  Prev: File,  Up: Pseudo Ops
  1333. `.fill REPEAT , SIZE , VALUE'
  1334. =============================
  1335.    RESULT, SIZE and VALUE are absolute expressions.  This emits REPEAT
  1336. copies of SIZE bytes.  REPEAT may be zero or more.  SIZE may be zero or
  1337. more, but if it is more than 8, then it is deemed to have the value 8,
  1338. compatible with other people's assemblers.  The contents of each REPEAT
  1339. bytes is taken from an 8-byte number.  The highest order 4 bytes are
  1340. zero.  The lowest order 4 bytes are VALUE rendered in the byte-order of
  1341. an integer on the computer `as' is assembling for.  Each SIZE bytes in
  1342. a repetition is taken from the lowest order SIZE bytes of this number.
  1343. Again, this bizarre behavior is compatible with other people's
  1344. assemblers.
  1345.    SIZE and VALUE are optional.  If the second comma and VALUE are
  1346. absent, VALUE is assumed zero.  If the first comma and following tokens
  1347. are absent, SIZE is assumed to be 1.
  1348. File: as,  Node: Float,  Next: Global,  Prev: Fill,  Up: Pseudo Ops
  1349. `.float FLONUMS'
  1350. ================
  1351.    This directive assembles zero or more flonums, separated by commas.
  1352. It has the same effect as `.single'.  The exact kind of floating point
  1353. numbers emitted depends on how `as' is configured.  *Note Machine
  1354. Dependencies::.
  1355. File: as,  Node: Global,  Next: hword,  Prev: Float,  Up: Pseudo Ops
  1356. `.global SYMBOL', `.globl SYMBOL'
  1357. =================================
  1358.    `.global' makes the symbol visible to `ld'.  If you define SYMBOL in
  1359. your partial program, its value is made available to other partial
  1360. programs that are linked with it.  Otherwise, SYMBOL will take its
  1361. attributes from a symbol of the same name from another partial program
  1362. it is linked with.
  1363.    Both spellings (`.globl' and `.global') are accepted, for
  1364. compatibility with other assemblers.
  1365. File: as,  Node: hword,  Next: Ident,  Prev: Global,  Up: Pseudo Ops
  1366. `.hword EXPRESSIONS'
  1367. ====================
  1368.    This expects zero or more EXPRESSIONS, and emits a 16 bit number for
  1369. each.
  1370.    This directive is a synonym for `.short'; depending on the target
  1371. architecture, it may also be a synonym for `.word'.
  1372. File: as,  Node: Ident,  Next: If,  Prev: hword,  Up: Pseudo Ops
  1373. `.ident'
  1374. ========
  1375.    This directive is used by some assemblers to place tags in object
  1376. files.  `as' simply accepts the directive for source-file compatibility
  1377. with such assemblers, but does not actually emit anything for it.
  1378. File: as,  Node: If,  Next: Include,  Prev: Ident,  Up: Pseudo Ops
  1379. `.if ABSOLUTE EXPRESSION'
  1380. =========================
  1381.    `.if' marks the beginning of a section of code which is only
  1382. considered part of the source program being assembled if the argument
  1383. (which must be an ABSOLUTE EXPRESSION) is non-zero.  The end of the
  1384. conditional section of code must be marked by `.endif' (*note `.endif':
  1385. Endif.); optionally, you may include code for the alternative
  1386. condition, flagged by `.else' (*note `.else': Else..
  1387.    The following variants of `.if' are also supported:
  1388. `.ifdef SYMBOL'
  1389.      Assembles the following section of code if the specified SYMBOL
  1390.      has been defined.
  1391. `.ifndef SYMBOL'
  1392. `ifnotdef SYMBOL'
  1393.      Assembles the following section of code if the specified SYMBOL
  1394.      has not been defined.  Both spelling variants are equivalent.
  1395. File: as,  Node: Include,  Next: Int,  Prev: If,  Up: Pseudo Ops
  1396. `.include "FILE"'
  1397. =================
  1398.    This directive provides a way to include supporting files at
  1399. specified points in your source program.  The code from FILE is
  1400. assembled as if it followed the point of the `.include'; when the end
  1401. of the included file is reached, assembly of the original file
  1402. continues.  You can control the search paths used with the `-I'
  1403. command-line option (*note Command-Line Options: Invoking.).  Quotation
  1404. marks are required around FILE.
  1405. File: as,  Node: Int,  Next: Lcomm,  Prev: Include,  Up: Pseudo Ops
  1406. `.int EXPRESSIONS'
  1407. ==================
  1408.    Expect zero or more EXPRESSIONS, of any section, separated by
  1409. commas.  For each expression, emit a 32-bit number that will, at run
  1410. time, be the value of that expression.  The byte order of the
  1411. expression depends on what kind of computer will run the program.
  1412. File: as,  Node: Lcomm,  Next: Lflags,  Prev: Int,  Up: Pseudo Ops
  1413. `.lcomm SYMBOL , LENGTH'
  1414. ========================
  1415.    Reserve LENGTH (an absolute expression) bytes for a local common
  1416. denoted by SYMBOL.  The section and value of SYMBOL are those of the
  1417. new local common.  The addresses are allocated in the bss section, so
  1418. at run-time the bytes will start off zeroed.  SYMBOL is not declared
  1419. global (*note `.global': Global.), so is normally not visible to `ld'.
  1420. File: as,  Node: Lflags,  Next: Line,  Prev: Lcomm,  Up: Pseudo Ops
  1421. `.lflags'
  1422. =========
  1423.    `as' accepts this directive, for compatibility with other
  1424. assemblers, but ignores it.
  1425. File: as,  Node: Line,  Next: Ln,  Prev: Lflags,  Up: Pseudo Ops
  1426. `.line LINE-NUMBER'
  1427. ===================
  1428.    Tell `as' to change the logical line number.  LINE-NUMBER must be an
  1429. absolute expression.  The next line will have that logical line number.
  1430. So any other statements on the current line (after a statement
  1431. separator character) will be reported as on logical line number
  1432. LINE-NUMBER - 1.  One day this directive will be unsupported: it is
  1433. used only for compatibility with existing assembler programs.
  1434.    *Warning:* In the AMD29K configuration of as, this command is only
  1435. available with the name `.ln', rather than as either `.line' or `.ln'.
  1436.    Even though this is a directive associated with the `a.out' or
  1437. `b.out' object-code formats, `as' will still recognize it when
  1438. producing COFF output, and will treat `.line' as though it were the
  1439. COFF `.ln' *if* it is found outside a `.def'/`.endef' pair.
  1440.    Inside a `.def', `.line' is, instead, one of the directives used by
  1441. compilers to generate auxiliary symbol information for debugging.
  1442. File: as,  Node: Ln,  Next: List,  Prev: Line,  Up: Pseudo Ops
  1443. `.ln LINE-NUMBER'
  1444. =================
  1445.    `.ln' is a synonym for `.line'.
  1446. File: as,  Node: List,  Next: Long,  Prev: Ln,  Up: Pseudo Ops
  1447. `.list'
  1448. =======
  1449.    Control (in conjunction with the `.nolist' directive) whether or not
  1450. assembly listings are generated.  These two directives maintain an
  1451. internal counter (which is zero initially).   `.list' increments the
  1452. counter, and `.nolist' decrements it.  Assembly listings are generated
  1453. whenever the counter is greater than zero.
  1454.    By default, listings are disabled.  When you enable them (with the
  1455. `-a' command line option; *note Command-Line Options: Invoking.), the
  1456. initial value of the listing counter is one.
  1457. File: as,  Node: Long,  Next: Nolist,  Prev: List,  Up: Pseudo Ops
  1458. `.long EXPRESSIONS'
  1459. ===================
  1460.    `.long' is the same as `.int', *note `.int': Int..
  1461. File: as,  Node: Nolist,  Next: Octa,  Prev: Long,  Up: Pseudo Ops
  1462. `.nolist'
  1463. =========
  1464.    Control (in conjunction with the `.list' directive) whether or not
  1465. assembly listings are generated.  These two directives maintain an
  1466. internal counter (which is zero initially).   `.list' increments the
  1467. counter, and `.nolist' decrements it.  Assembly listings are generated
  1468. whenever the counter is greater than zero.
  1469. File: as,  Node: Octa,  Next: Org,  Prev: Nolist,  Up: Pseudo Ops
  1470. `.octa BIGNUMS'
  1471. ===============
  1472.    This directive expects zero or more bignums, separated by commas.
  1473. For each bignum, it emits a 16-byte integer.
  1474.    The term "octa" comes from contexts in which a "word" is two bytes;
  1475. hence *octa*-word for 16 bytes.
  1476. File: as,  Node: Org,  Next: Psize,  Prev: Octa,  Up: Pseudo Ops
  1477. `.org NEW-LC , FILL'
  1478. ====================
  1479.    `.org' will advance the location counter of the current section to
  1480. NEW-LC.  NEW-LC is either an absolute expression or an expression with
  1481. the same section as the current subsection.  That is, you can't use
  1482. `.org' to cross sections: if NEW-LC has the wrong section, the `.org'
  1483. directive is ignored.  To be compatible with former assemblers, if the
  1484. section of NEW-LC is absolute, `as' will issue a warning, then pretend
  1485. the section of NEW-LC is the same as the current subsection.
  1486.    `.org' may only increase the location counter, or leave it
  1487. unchanged; you cannot use `.org' to move the location counter backwards.
  1488.    Because `as' tries to assemble programs in one pass NEW-LC may not
  1489. be undefined.  If you really detest this restriction we eagerly await a
  1490. chance to share your improved assembler.
  1491.    Beware that the origin is relative to the start of the section, not
  1492. to the start of the subsection.  This is compatible with other people's
  1493. assemblers.
  1494.    When the location counter (of the current subsection) is advanced,
  1495. the intervening bytes are filled with FILL which should be an absolute
  1496. expression.  If the comma and FILL are omitted, FILL defaults to zero.
  1497. File: as,  Node: Psize,  Next: Quad,  Prev: Org,  Up: Pseudo Ops
  1498. `.psize LINES , COLUMNS'
  1499. ========================
  1500.    Use this directive to declare the number of lines--and, optionally,
  1501. the number of columns--to use for each page, when generating listings.
  1502.    If you don't use `.psize', listings will use a default line-count of
  1503. 60.  You may omit the comma and COLUMNS specification; the default
  1504. width is 200 columns.
  1505.    `as' will generate formfeeds whenever the specified number of lines
  1506. is exceeded (or whenever you explicitly request one, using `.eject').
  1507.    If you specify LINES as `0', no formfeeds are generated save those
  1508. explicitly specified with `.eject'.
  1509. File: as,  Node: Quad,  Next: Sbttl,  Prev: Psize,  Up: Pseudo Ops
  1510. `.quad BIGNUMS'
  1511. ===============
  1512.    `.quad' expects zero or more bignums, separated by commas.  For each
  1513. bignum, it emits an 8-byte integer.  If the bignum won't fit in 8
  1514. bytes, it prints a warning message; and just takes the lowest order 8
  1515. bytes of the bignum.
  1516.    The term "quad" comes from contexts in which a "word" is two bytes;
  1517. hence *quad*-word for 8 bytes.
  1518. File: as,  Node: Sbttl,  Next: Scl,  Prev: Quad,  Up: Pseudo Ops
  1519. `.sbttl "SUBHEADING"'
  1520. =====================
  1521.    Use SUBHEADING as the title (third line, immediately after the title
  1522. line) when generating assembly listings.
  1523.    This directive affects subsequent pages, as well as the current page
  1524. if it appears within ten lines of the top of a page.
  1525. File: as,  Node: Scl,  Next: Section,  Prev: Sbttl,  Up: Pseudo Ops
  1526. `.scl CLASS'
  1527. ============
  1528.    Set the storage-class value for a symbol.  This directive may only be
  1529. used inside a `.def'/`.endef' pair.  Storage class may flag whether a
  1530. symbol is static or external, or it may record further symbolic
  1531. debugging information.
  1532.    The `.scl' directive is primarily associated with COFF output; when
  1533. configured to generate `b.out' output format, `as' will accept this
  1534. directive but ignore it.
  1535. File: as,  Node: Section,  Next: Set,  Prev: Scl,  Up: Pseudo Ops
  1536. `.section NAME, SUBSECTION'
  1537. ===========================
  1538.    Assemble the following code into end of subsection numbered
  1539. SUBSECTION in the COFF named section NAME.  If you omit SUBSECTION,
  1540. `as' uses subsection number zero.  `.section .text' is equivalent to
  1541. the `.text' directive; `.section .data' is equivalent to the `.data'
  1542. directive.
  1543. File: as,  Node: Set,  Next: Short,  Prev: Section,  Up: Pseudo Ops
  1544. `.set SYMBOL, EXPRESSION'
  1545. =========================
  1546.    This directive sets the value of SYMBOL to EXPRESSION.  This will
  1547. change SYMBOL's value and type to conform to EXPRESSION.  If SYMBOL was
  1548. flagged as external, it remains flagged. (*Note Symbol Attributes::.)
  1549.    You may `.set' a symbol many times in the same assembly.  If the
  1550. expression's section is unknowable during pass 1, a second pass over
  1551. the source program will be forced.  The second pass is currently not
  1552. implemented.  `as' will abort with an error message if one is required.
  1553.    If you `.set' a global symbol, the value stored in the object file
  1554. is the last value stored into it.
  1555. File: as,  Node: Short,  Next: Single,  Prev: Set,  Up: Pseudo Ops
  1556. `.short EXPRESSIONS'
  1557. ====================
  1558.    `.short' is normally the same as `.word'.  *Note `.word': Word.
  1559.    In some configurations, however, `.short' and `.word' generate
  1560. numbers of different lengths; *note Machine Dependencies::..
  1561. File: as,  Node: Single,  Next: Size,  Prev: Short,  Up: Pseudo Ops
  1562. `.single FLONUMS'
  1563. =================
  1564.    This directive assembles zero or more flonums, separated by commas.
  1565. It has the same effect as `.float'.  The exact kind of floating point
  1566. numbers emitted depends on how `as' is configured.  *Note Machine
  1567. Dependencies::.
  1568. File: as,  Node: Size,  Next: Space,  Prev: Single,  Up: Pseudo Ops
  1569. `.size'
  1570. =======
  1571.    This directive is generated by compilers to include auxiliary
  1572. debugging information in the symbol table.  It is only permitted inside
  1573. `.def'/`.endef' pairs.
  1574.    `.size' is only meaningful when generating COFF format output; when
  1575. `as' is generating `b.out', it accepts this directive but ignores it.
  1576. File: as,  Node: Space,  Next: Stab,  Prev: Size,  Up: Pseudo Ops
  1577. `.space SIZE , FILL'
  1578. ====================
  1579.    This directive emits SIZE bytes, each of value FILL.  Both SIZE and
  1580. FILL are absolute expressions.  If the comma and FILL are omitted, FILL
  1581. is assumed to be zero.
  1582.    On the AMD 29K, this directive is ignored; it is accepted for
  1583. compatibility with other AMD 29K assemblers.
  1584.      *Warning:* In most versions of the GNU assembler, the directive
  1585.      `.space' has the effect of `.block'  *Note Machine Dependencies::.
  1586. File: as,  Node: Stab,  Next: Tag,  Prev: Space,  Up: Pseudo Ops
  1587. `.stabd, .stabn, .stabs'
  1588. ========================
  1589.    There are three directives that begin `.stab'.  All emit symbols
  1590. (*note Symbols::.), for use by symbolic debuggers.  The symbols are not
  1591. entered in the `as' hash table: they cannot be referenced elsewhere in
  1592. the source file.  Up to five fields are required:
  1593. STRING
  1594.      This is the symbol's name.  It may contain any character except
  1595.      `\000', so is more general than ordinary symbol names.  Some
  1596.      debuggers used to code arbitrarily complex structures into symbol
  1597.      names using this field.
  1598.      An absolute expression.  The symbol's type is set to the low 8
  1599.      bits of this expression.  Any bit pattern is permitted, but `ld'
  1600.      and debuggers will choke on silly bit patterns.
  1601. OTHER
  1602.      An absolute expression.  The symbol's "other" attribute is set to
  1603.      the low 8 bits of this expression.
  1604.      An absolute expression.  The symbol's descriptor is set to the low
  1605.      16 bits of this expression.
  1606. VALUE
  1607.      An absolute expression which becomes the symbol's value.
  1608.    If a warning is detected while reading a `.stabd', `.stabn', or
  1609. `.stabs' statement, the symbol has probably already been created and
  1610. you will get a half-formed symbol in your object file.  This is
  1611. compatible with earlier assemblers!
  1612. `.stabd TYPE , OTHER , DESC'
  1613.      The "name" of the symbol generated is not even an empty string.
  1614.      It is a null pointer, for compatibility.  Older assemblers used a
  1615.      null pointer so they didn't waste space in object files with empty
  1616.      strings.
  1617.      The symbol's value is set to the location counter, relocatably.
  1618.      When your program is linked, the value of this symbol will be
  1619.      where the location counter was when the `.stabd' was assembled.
  1620. `.stabn TYPE , OTHER , DESC , VALUE'
  1621.      The name of the symbol is set to the empty string `""'.
  1622. `.stabs STRING ,  TYPE , OTHER , DESC , VALUE'
  1623.      All five fields are specified.
  1624. File: as,  Node: Tag,  Next: Text,  Prev: Stab,  Up: Pseudo Ops
  1625. `.tag STRUCTNAME'
  1626. =================
  1627.    This directive is generated by compilers to include auxiliary
  1628. debugging information in the symbol table.  It is only permitted inside
  1629. `.def'/`.endef' pairs.  Tags are used to link structure definitions in
  1630. the symbol table with instances of those structures.
  1631.    `.tag' is only used when generating COFF format output; when `as' is
  1632. generating `b.out', it accepts this directive but ignores it.
  1633. File: as,  Node: Text,  Next: Title,  Prev: Tag,  Up: Pseudo Ops
  1634. `.text SUBSECTION'
  1635. ==================
  1636.    Tells `as' to assemble the following statements onto the end of the
  1637. text subsection numbered SUBSECTION, which is an absolute expression.
  1638. If SUBSECTION is omitted, subsection number zero is used.
  1639. File: as,  Node: Title,  Next: Type,  Prev: Text,  Up: Pseudo Ops
  1640. `.title "HEADING"'
  1641. ==================
  1642.    Use HEADING as the title (second line, immediately after the source
  1643. file name and pagenumber) when generating assembly listings.
  1644.    This directive affects subsequent pages, as well as the current page
  1645. if it appears within ten lines of the top of a page.
  1646. File: as,  Node: Type,  Next: Val,  Prev: Title,  Up: Pseudo Ops
  1647. `.type INT'
  1648. ===========
  1649.    This directive, permitted only within `.def'/`.endef' pairs, records
  1650. the integer INT as the type attribute of a symbol table entry.
  1651.    `.type' is associated only with COFF format output; when `as' is
  1652. configured for `b.out' output, it accepts this directive but ignores it.
  1653. File: as,  Node: Val,  Next: Word,  Prev: Type,  Up: Pseudo Ops
  1654. `.val ADDR'
  1655. ===========
  1656.    This directive, permitted only within `.def'/`.endef' pairs, records
  1657. the address ADDR as the value attribute of a symbol table entry.
  1658.    `.val' is used only for COFF output; when `as' is configured for
  1659. `b.out', it accepts this directive but ignores it.
  1660. File: as,  Node: Word,  Next: Deprecated,  Prev: Val,  Up: Pseudo Ops
  1661. `.word EXPRESSIONS'
  1662. ===================
  1663.    This directive expects zero or more EXPRESSIONS, of any section,
  1664. separated by commas.
  1665.    The size of the number emitted, and its byte order, depends on what
  1666. kind of computer will run the program.
  1667.      *Warning: Special Treatment to support Compilers*
  1668.    Machines with a 32-bit address space, but that do less than 32-bit
  1669. addressing, require the following special treatment.  If the machine of
  1670. interest to you does 32-bit addressing (or doesn't require it; *note
  1671. Machine Dependencies::.), you can ignore this issue.
  1672.    In order to assemble compiler output into something that will work,
  1673. `as' will occasionlly do strange things to `.word' directives.
  1674. Directives of the form `.word sym1-sym2' are often emitted by compilers
  1675. as part of jump tables.  Therefore, when `as' assembles a directive of
  1676. the form `.word sym1-sym2', and the difference between `sym1' and
  1677. `sym2' does not fit in 16 bits, `as' will create a "secondary jump
  1678. table", immediately before the next label.  This secondary jump table
  1679. will be preceded by a short-jump to the first byte after the secondary
  1680. table.  This short-jump prevents the flow of control from accidentally
  1681. falling into the new table.  Inside the table will be a long-jump to
  1682. `sym2'.  The original `.word' will contain `sym1' minus the address of
  1683. the long-jump to `sym2'.
  1684.    If there were several occurrences of `.word sym1-sym2' before the
  1685. secondary jump table, all of them will be adjusted.  If there was a
  1686. `.word sym3-sym4', that also did not fit in sixteen bits, a long-jump
  1687. to `sym4' will be included in the secondary jump table, and the `.word'
  1688. directives will be adjusted to contain `sym3' minus the address of the
  1689. long-jump to `sym4'; and so on, for as many entries in the original
  1690. jump table as necessary.
  1691. File: as,  Node: Deprecated,  Prev: Word,  Up: Pseudo Ops
  1692. Deprecated Directives
  1693. =====================
  1694.    One day these directives won't work.  They are included for
  1695. compatibility with older assemblers.
  1696. .abort
  1697. .app-file
  1698. .line
  1699. File: as,  Node: Machine Dependencies,  Next: Copying,  Prev: Pseudo Ops,  Up: Top
  1700. Machine Dependent Features
  1701. **************************
  1702.    The machine instruction sets are (almost by definition) different on
  1703. each machine where `as' runs.  Floating point representations vary as
  1704. well, and `as' often supports a few additional directives or
  1705. command-line options for compatibility with other assemblers on a
  1706. particular platform.  Finally, some versions of `as' support special
  1707. pseudo-instructions for branch optimization.
  1708.    This chapter discusses most of these differences, though it does not
  1709. include details on any machine's instruction set.  For details on that
  1710. subject, see the hardware manufacturer's manual.
  1711. * Menu:
  1712. * Vax-Dependent::               VAX Dependent Features
  1713. * AMD29K-Dependent::            AMD 29K Dependent Features
  1714. * H8/300-Dependent::            Hitachi H8/300 Dependent Features
  1715. * H8/500-Dependent::            Hitachi H8/500 Dependent Features
  1716. * SH-Dependent::                Hitachi SH Dependent Features
  1717. * i960-Dependent::              Intel 80960 Dependent Features
  1718. * M68K-Dependent::              M680x0 Dependent Features
  1719. * Sparc-Dependent::             SPARC Dependent Features
  1720. * Z8000-Dependent::             Z8000 Dependent Features
  1721. * i386-Dependent::              80386 Dependent Features
  1722. File: as,  Node: Vax-Dependent,  Next: AMD29K-Dependent,  Up: Machine Dependencies
  1723. VAX Dependent Features
  1724. ======================
  1725. * Menu:
  1726. * Vax-Opts::                    VAX Command-Line Options
  1727. * VAX-float::                   VAX Floating Point
  1728. * VAX-directives::              Vax Machine Directives
  1729. * VAX-opcodes::                 VAX Opcodes
  1730. * VAX-branch::                  VAX Branch Improvement
  1731. * VAX-operands::                VAX Operands
  1732. * VAX-no::                      Not Supported on VAX
  1733. File: as,  Node: Vax-Opts,  Next: VAX-float,  Up: Vax-Dependent
  1734. VAX Command-Line Options
  1735. ------------------------
  1736.    The Vax version of `as' accepts any of the following options, gives
  1737. a warning message that the option was ignored and proceeds.  These
  1738. options are for compatibility with scripts designed for other people's
  1739. assemblers.
  1740. `-D' (Debug)
  1741. `-S' (Symbol Table)
  1742. `-T' (Token Trace)
  1743.      These are obsolete options used to debug old assemblers.
  1744. `-d' (Displacement size for JUMPs)
  1745.      This option expects a number following the `-d'.  Like options
  1746.      that expect filenames, the number may immediately follow the `-d'
  1747.      (old standard) or constitute the whole of the command line
  1748.      argument that follows `-d' (GNU standard).
  1749. `-V' (Virtualize Interpass Temporary File)
  1750.      Some other assemblers use a temporary file.  This option commanded
  1751.      them to keep the information in active memory rather than in a
  1752.      disk file.  `as' always does this, so this option is redundant.
  1753. `-J' (JUMPify Longer Branches)
  1754.      Many 32-bit computers permit a variety of branch instructions to
  1755.      do the same job.  Some of these instructions are short (and fast)
  1756.      but have a limited range; others are long (and slow) but can
  1757.      branch anywhere in virtual memory.  Often there are 3 flavors of
  1758.      branch: short, medium and long.  Some other assemblers would emit
  1759.      short and medium branches, unless told by this option to emit
  1760.      short and long branches.
  1761. `-t' (Temporary File Directory)
  1762.      Some other assemblers may use a temporary file, and this option
  1763.      takes a filename being the directory to site the temporary file.
  1764.      Since `as' does not use a temporary disk file, this option makes
  1765.      no difference.  `-t' needs exactly one filename.
  1766.    The Vax version of the assembler accepts two options when compiled
  1767. for VMS.  They are `-h', and `-+'.  The `-h' option prevents `as' from
  1768. modifying the symbol-table entries for symbols that contain lowercase
  1769. characters (I think).  The `-+' option causes `as' to print warning
  1770. messages if the FILENAME part of the object file, or any symbol name is
  1771. larger than 31 characters.  The `-+' option also insertes some code
  1772. following the `_main' symbol so that the object file will be compatible
  1773. with Vax-11 "C".
  1774. File: as,  Node: VAX-float,  Next: VAX-directives,  Prev: Vax-Opts,  Up: Vax-Dependent
  1775. VAX Floating Point
  1776. ------------------
  1777.    Conversion of flonums to floating point is correct, and compatible
  1778. with previous assemblers.  Rounding is towards zero if the remainder is
  1779. exactly half the least significant bit.
  1780.    `D', `F', `G' and `H' floating point formats are understood.
  1781.    Immediate floating literals (*e.g.* `S`$6.9') are rendered
  1782. correctly.  Again, rounding is towards zero in the boundary case.
  1783.    The `.float' directive produces `f' format numbers.  The `.double'
  1784. directive produces `d' format numbers.
  1785. File: as,  Node: VAX-directives,  Next: VAX-opcodes,  Prev: VAX-float,  Up: Vax-Dependent
  1786. Vax Machine Directives
  1787. ----------------------
  1788.    The Vax version of the assembler supports four directives for
  1789. generating Vax floating point constants.  They are described in the
  1790. table below.
  1791. `.dfloat'
  1792.      This expects zero or more flonums, separated by commas, and
  1793.      assembles Vax `d' format 64-bit floating point constants.
  1794. `.ffloat'
  1795.      This expects zero or more flonums, separated by commas, and
  1796.      assembles Vax `f' format 32-bit floating point constants.
  1797. `.gfloat'
  1798.      This expects zero or more flonums, separated by commas, and
  1799.      assembles Vax `g' format 64-bit floating point constants.
  1800. `.hfloat'
  1801.      This expects zero or more flonums, separated by commas, and
  1802.      assembles Vax `h' format 128-bit floating point constants.
  1803. File: as,  Node: VAX-opcodes,  Next: VAX-branch,  Prev: VAX-directives,  Up: Vax-Dependent
  1804. VAX Opcodes
  1805. -----------
  1806.    All DEC mnemonics are supported.  Beware that `case...' instructions
  1807. have exactly 3 operands.  The dispatch table that follows the `case...'
  1808. instruction should be made with `.word' statements.  This is compatible
  1809. with all unix assemblers we know of.
  1810. File: as,  Node: VAX-branch,  Next: VAX-operands,  Prev: VAX-opcodes,  Up: Vax-Dependent
  1811. VAX Branch Improvement
  1812. ----------------------
  1813.    Certain pseudo opcodes are permitted.  They are for branch
  1814. instructions.  They expand to the shortest branch instruction that will
  1815. reach the target.  Generally these mnemonics are made by substituting
  1816. `j' for `b' at the start of a DEC mnemonic.  This feature is included
  1817. both for compatibility and to help compilers.  If you don't need this
  1818. feature, don't use these opcodes.  Here are the mnemonics, and the code
  1819. they can expand into.
  1820. `jbsb'
  1821.      `Jsb' is already an instruction mnemonic, so we chose `jbsb'.
  1822.     (byte displacement)
  1823.           `bsbb ...'
  1824.     (word displacement)
  1825.           `bsbw ...'
  1826.     (long displacement)
  1827.           `jsb ...'
  1828. `jbr'
  1829.      Unconditional branch.
  1830.     (byte displacement)
  1831.           `brb ...'
  1832.     (word displacement)
  1833.           `brw ...'
  1834.     (long displacement)
  1835.           `jmp ...'
  1836. `jCOND'
  1837.      COND may be any one of the conditional branches `neq', `nequ',
  1838.      `eql', `eqlu', `gtr', `geq', `lss', `gtru', `lequ', `vc', `vs',
  1839.      `gequ', `cc', `lssu', `cs'.  COND may also be one of the bit tests
  1840.      `bs', `bc', `bss', `bcs', `bsc', `bcc', `bssi', `bcci', `lbs',
  1841.      `lbc'.  NOTCOND is the opposite condition to COND.
  1842.     (byte displacement)
  1843.           `bCOND ...'
  1844.     (word displacement)
  1845.           `bNOTCOND foo ; brw ... ; foo:'
  1846.     (long displacement)
  1847.           `bNOTCOND foo ; jmp ... ; foo:'
  1848. `jacbX'
  1849.      X may be one of `b d f g h l w'.
  1850.     (word displacement)
  1851.           `OPCODE ...'
  1852.     (long displacement)
  1853.                OPCODE ..., foo ;
  1854.                brb bar ;
  1855.                foo: jmp ... ;
  1856.                bar:
  1857. `jaobYYY'
  1858.      YYY may be one of `lss leq'.
  1859. `jsobZZZ'
  1860.      ZZZ may be one of `geq gtr'.
  1861.     (byte displacement)
  1862.           `OPCODE ...'
  1863.     (word displacement)
  1864.                OPCODE ..., foo ;
  1865.                brb bar ;
  1866.                foo: brw DESTINATION ;
  1867.                bar:
  1868.     (long displacement)
  1869.                OPCODE ..., foo ;
  1870.                brb bar ;
  1871.                foo: jmp DESTINATION ;
  1872.                bar:
  1873. `aobleq'
  1874. `aoblss'
  1875. `sobgeq'
  1876. `sobgtr'
  1877.     (byte displacement)
  1878.           `OPCODE ...'
  1879.     (word displacement)
  1880.                OPCODE ..., foo ;
  1881.                brb bar ;
  1882.                foo: brw DESTINATION ;
  1883.                bar:
  1884.     (long displacement)
  1885.                OPCODE ..., foo ;
  1886.                brb bar ;
  1887.                foo: jmp DESTINATION ;
  1888.                bar:
  1889. File: as,  Node: VAX-operands,  Next: VAX-no,  Prev: VAX-branch,  Up: Vax-Dependent
  1890. VAX Operands
  1891. ------------
  1892.    The immediate character is `$' for Unix compatibility, not `#' as
  1893. DEC writes it.
  1894.    The indirect character is `*' for Unix compatibility, not `@' as DEC
  1895. writes it.
  1896.    The displacement sizing character is ``' (an accent grave) for Unix
  1897. compatibility, not `^' as DEC writes it.  The letter preceding ``' may
  1898. have either case.  `G' is not understood, but all other letters (`b i l
  1899. s w') are understood.
  1900.    Register names understood are `r0 r1 r2 ... r15 ap fp sp pc'.  Any
  1901. case of letters will do.
  1902.    For instance
  1903.      tstb *w`$4(r5)
  1904.    Any expression is permitted in an operand.  Operands are comma
  1905. separated.
  1906. File: as,  Node: VAX-no,  Prev: VAX-operands,  Up: Vax-Dependent
  1907. Not Supported on VAX
  1908. --------------------
  1909.    Vax bit fields can not be assembled with `as'.  Someone can add the
  1910. required code if they really need it.
  1911. File: as,  Node: AMD29K-Dependent,  Next: H8/300-Dependent,  Prev: Vax-Dependent,  Up: Machine Dependencies
  1912. AMD 29K Dependent Features
  1913. ==========================
  1914. * Menu:
  1915. * AMD29K Options::              Options
  1916. * AMD29K Syntax::               Syntax
  1917. * AMD29K Floating Point::       Floating Point
  1918. * AMD29K Directives::           AMD 29K Machine Directives
  1919. * AMD29K Opcodes::              Opcodes
  1920. File: as,  Node: AMD29K Options,  Next: AMD29K Syntax,  Up: AMD29K-Dependent
  1921. Options
  1922. -------
  1923.    `as' has no additional command-line options for the AMD 29K family.
  1924. File: as,  Node: AMD29K Syntax,  Next: AMD29K Floating Point,  Prev: AMD29K Options,  Up: AMD29K-Dependent
  1925. Syntax
  1926. ------
  1927. * Menu:
  1928. * AMD29K-Chars::                Special Characters
  1929. * AMD29K-Regs::                 Register Names
  1930. File: as,  Node: AMD29K-Chars,  Next: AMD29K-Regs,  Up: AMD29K Syntax
  1931. Special Characters
  1932. ..................
  1933.    `;' is the line comment character.
  1934.    `@' can be used instead of a newline to separate statements.
  1935.    The character `?' is permitted in identifiers (but may not begin an
  1936. identifier).
  1937. File: as,  Node: AMD29K-Regs,  Prev: AMD29K-Chars,  Up: AMD29K Syntax
  1938. Register Names
  1939. ..............
  1940.    General-purpose registers are represented by predefined symbols of
  1941. the form `GRNNN' (for global registers) or `LRNNN' (for local
  1942. registers), where NNN represents a number between `0' and `127',
  1943. written with no leading zeros.  The leading letters may be in either
  1944. upper or lower case; for example, `gr13' and `LR7' are both valid
  1945. register names.
  1946.    You may also refer to general-purpose registers by specifying the
  1947. register number as the result of an expression (prefixed with `%%' to
  1948. flag the expression as a register number):
  1949.      %%EXPRESSION
  1950. --where EXPRESSION must be an absolute expression evaluating to a
  1951. number between `0' and `255'.  The range [0, 127] refers to global
  1952. registers, and the range [128, 255] to local registers.
  1953.    In addition, `as' understands the following protected
  1954. special-purpose register names for the AMD 29K family:
  1955.        vab    chd    pc0
  1956.        ops    chc    pc1
  1957.        cps    rbp    pc2
  1958.        cfg    tmc    mmu
  1959.        cha    tmr    lru
  1960.    These unprotected special-purpose register names are also recognized:
  1961.        ipc    alu    fpe
  1962.        ipa    bp     inte
  1963.        ipb    fc     fps
  1964.        q      cr     exop
  1965. File: as,  Node: AMD29K Floating Point,  Next: AMD29K Directives,  Prev: AMD29K Syntax,  Up: AMD29K-Dependent
  1966. Floating Point
  1967. --------------
  1968.    The AMD 29K family uses IEEE floating-point numbers.
  1969. File: as,  Node: AMD29K Directives,  Next: AMD29K Opcodes,  Prev: AMD29K Floating Point,  Up: AMD29K-Dependent
  1970. AMD 29K Machine Directives
  1971. --------------------------
  1972. `.block SIZE , FILL'
  1973.      This directive emits SIZE bytes, each of value FILL.  Both SIZE
  1974.      and FILL are absolute expressions.  If the comma and FILL are
  1975.      omitted, FILL is assumed to be zero.
  1976.      In other versions of the GNU assembler, this directive is called
  1977.      `.space'.
  1978. `.cputype'
  1979.      This directive is ignored; it is accepted for compatibility with
  1980.      other AMD 29K assemblers.
  1981. `.file'
  1982.      This directive is ignored; it is accepted for compatibility with
  1983.      other AMD 29K assemblers.
  1984.           *Warning:* in other versions of the GNU assembler, `.file' is
  1985.           used for the directive called `.app-file' in the AMD 29K
  1986.           support.
  1987. `.line'
  1988.      This directive is ignored; it is accepted for compatibility with
  1989.      other AMD 29K assemblers.
  1990. `.sect'
  1991.      This directive is ignored; it is accepted for compatibility with
  1992.      other AMD 29K assemblers.
  1993. `.use SECTION NAME'
  1994.      Establishes the section and subsection for the following code;
  1995.      SECTION NAME may be one of `.text', `.data', `.data1', or `.lit'.
  1996.      With one of the first three SECTION NAME options, `.use' is
  1997.      equivalent to the machine directive SECTION NAME; the remaining
  1998.      case, `.use .lit', is the same as `.data 200'.
  1999. File: as,  Node: AMD29K Opcodes,  Prev: AMD29K Directives,  Up: AMD29K-Dependent
  2000. Opcodes
  2001. -------
  2002.    `as' implements all the standard AMD 29K opcodes.  No additional
  2003. pseudo-instructions are needed on this family.
  2004.    For information on the 29K machine instruction set, see `Am29000
  2005. User's Manual', Advanced Micro Devices, Inc.
  2006. File: as,  Node: H8/300-Dependent,  Next: H8/500-Dependent,  Prev: AMD29K-Dependent,  Up: Machine Dependencies
  2007. H8/300 Dependent Features
  2008. =========================
  2009. * Menu:
  2010. * H8/300 Options::              Options
  2011. * H8/300 Syntax::               Syntax
  2012. * H8/300 Floating Point::       Floating Point
  2013. * H8/300 Directives::           H8/300 Machine Directives
  2014. * H8/300 Opcodes::              Opcodes
  2015. File: as,  Node: H8/300 Options,  Next: H8/300 Syntax,  Up: H8/300-Dependent
  2016. Options
  2017. -------
  2018.    `as' has no additional command-line options for the Hitachi H8/300
  2019. family.
  2020. File: as,  Node: H8/300 Syntax,  Next: H8/300 Floating Point,  Prev: H8/300 Options,  Up: H8/300-Dependent
  2021. Syntax
  2022. ------
  2023. * Menu:
  2024. * H8/300-Chars::                Special Characters
  2025. * H8/300-Regs::                 Register Names
  2026. * H8/300-Addressing::           Addressing Modes
  2027. File: as,  Node: H8/300-Chars,  Next: H8/300-Regs,  Up: H8/300 Syntax
  2028. Special Characters
  2029. ..................
  2030.    `;' is the line comment character.
  2031.    `$' can be used instead of a newline to separate statements.
  2032. Therefore *you may not use `$' in symbol names* on the H8/300.
  2033. File: as,  Node: H8/300-Regs,  Next: H8/300-Addressing,  Prev: H8/300-Chars,  Up: H8/300 Syntax
  2034. Register Names
  2035. ..............
  2036.    You can use predefined symbols of the form `rNh' and `rNl' to refer
  2037. to the H8/300 registers as sixteen 8-bit general-purpose registers.  N
  2038. is a digit from `0' to `7'); for instance, both `r0h' and `r7l' are
  2039. valid register names.
  2040.    You can also use the eight predefined symbols `rN' to refer to the
  2041. H8/300 registers as 16-bit registers (you must use this form for
  2042. addressing).
  2043.    On the H8/300H, you can also use the eight predefined symbols `erN'
  2044. (`er0' ... `er7') to refer to the 32-bit general purpose registers.
  2045.    The two control registers are called `pc' (program counter; a 16-bit
  2046. register, except on the H8/300H where it is 24 bits) and `ccr'
  2047. (condition code register; an 8-bit register).  `r7' is used as the
  2048. stack pointer, and can also be called `sp'.
  2049. File: as,  Node: H8/300-Addressing,  Prev: H8/300-Regs,  Up: H8/300 Syntax
  2050. Addressing Modes
  2051. ................
  2052.    as understands the following addressing modes for the H8/300:
  2053.      Register direct
  2054. `@rN'
  2055.      Register indirect
  2056. `@(D, rN)'
  2057. `@(D:16, rN)'
  2058. `@(D:24, rN)'
  2059.      Register indirect: 16-bit or 24-bit displacement D from register
  2060.      N.  (24-bit displacements are only meaningful on the H8/300H.)
  2061. `@rN+'
  2062.      Register indirect with post-increment
  2063. `@-rN'
  2064.      Register indirect with pre-decrement
  2065. ``@'AA'
  2066. ``@'AA:8'
  2067. ``@'AA:16'
  2068. ``@'AA:24'
  2069.      Absolute address `aa'.  (The address size `:24' only makes sense
  2070.      on the H8/300H.)
  2071. `#XX'
  2072. `#XX:8'
  2073. `#XX:16'
  2074. `#XX:32'
  2075.      Immediate data XX.  You may specify the `:8', `:16', or `:32' for
  2076.      clarity, if you wish; but `as' neither requires this nor uses
  2077.      it--the data size required is taken from context.
  2078. ``@'`@'AA'
  2079. ``@'`@'AA:8'
  2080.      Memory indirect.  You may specify the `:8' for clarity, if you
  2081.      wish; but `as' neither requires this nor uses it.
  2082. File: as,  Node: H8/300 Floating Point,  Next: H8/300 Directives,  Prev: H8/300 Syntax,  Up: H8/300-Dependent
  2083. Floating Point
  2084. --------------
  2085.    The H8/300 family has no hardware floating point, but the `.float'
  2086. directive generates IEEE floating-point numbers for compatibility with
  2087. other development tools.
  2088. File: as,  Node: H8/300 Directives,  Next: H8/300 Opcodes,  Prev: H8/300 Floating Point,  Up: H8/300-Dependent
  2089. H8/300 Machine Directives
  2090. -------------------------
  2091.    `as' has only one machine-dependent directive for the H8/300:
  2092. `.h300h'
  2093.      Recognize and emit additional instructions for the H8/300H
  2094.      variant, and also make `.int' emit 32-bit numbers rather than the
  2095.      usual (16-bit) for the H8/300 family.
  2096.    On the H8/300 family (including the H8/300H) `.word' directives
  2097. generate 16-bit numbers.
  2098. File: as,  Node: H8/300 Opcodes,  Prev: H8/300 Directives,  Up: H8/300-Dependent
  2099. Opcodes
  2100. -------
  2101.    For detailed information on the H8/300 machine instruction set, see
  2102. `H8/300 Series Programming Manual' (Hitachi ADE-602-025).  For
  2103. information specific to the H8/300H, see `H8/300H Series Programming
  2104. Manual' (Hitachi).
  2105.    `as' implements all the standard H8/300 opcodes.  No additional
  2106. pseudo-instructions are needed on this family.
  2107.    The following table summarizes the H8/300 opcodes, and their
  2108. arguments.  Entries marked `*' are opcodes used only on the H8/300H.
  2109.               Legend:
  2110.                  Rs   source register
  2111.                  Rd   destination register
  2112.                  abs  absolute address
  2113.                  imm  immediate data
  2114.               disp:N  N-bit displacement from a register
  2115.              pcrel:N  N-bit displacement relative to program counter
  2116.      
  2117.         add.b #imm,rd              *  andc #imm,ccr
  2118.         add.b rs,rd                   band #imm,rd
  2119.         add.w rs,rd                   band #imm,@rd
  2120.      *  add.w #imm,rd                 band #imm,@abs:8
  2121.      *  add.l rs,rd                   bra  pcrel:8
  2122.      *  add.l #imm,rd              *  bra  pcrel:16
  2123.         adds #imm,rd                  bt   pcrel:8
  2124.         addx #imm,rd               *  bt   pcrel:16
  2125.         addx rs,rd                    brn  pcrel:8
  2126.         and.b #imm,rd              *  brn  pcrel:16
  2127.         and.b rs,rd                   bf   pcrel:8
  2128.      *  and.w rs,rd                *  bf   pcrel:16
  2129.      *  and.w #imm,rd                 bhi  pcrel:8
  2130.      *  and.l #imm,rd              *  bhi  pcrel:16
  2131.      *  and.l rs,rd                   bls  pcrel:8
  2132.      
  2133.      *  bls  pcrel:16                 bld  #imm,rd
  2134.         bcc  pcrel:8                  bld  #imm,@rd
  2135.      *  bcc  pcrel:16                 bld  #imm,@abs:8
  2136.         bhs  pcrel:8                  bnot #imm,rd
  2137.      *  bhs  pcrel:16                 bnot #imm,@rd
  2138.         bcs  pcrel:8                  bnot #imm,@abs:8
  2139.      *  bcs  pcrel:16                 bnot rs,rd
  2140.         blo  pcrel:8                  bnot rs,@rd
  2141.      *  blo  pcrel:16                 bnot rs,@abs:8
  2142.         bne  pcrel:8                  bor  #imm,rd
  2143.      *  bne  pcrel:16                 bor  #imm,@rd
  2144.         beq  pcrel:8                  bor  #imm,@abs:8
  2145.      *  beq  pcrel:16                 bset #imm,rd
  2146.         bvc  pcrel:8                  bset #imm,@rd
  2147.      *  bvc  pcrel:16                 bset #imm,@abs:8
  2148.         bvs  pcrel:8                  bset rs,rd
  2149.      *  bvs  pcrel:16                 bset rs,@rd
  2150.         bpl  pcrel:8                  bset rs,@abs:8
  2151.      *  bpl  pcrel:16                 bsr  pcrel:8
  2152.         bmi  pcrel:8                  bsr  pcrel:16
  2153.      *  bmi  pcrel:16                 bst  #imm,rd
  2154.         bge  pcrel:8                  bst  #imm,@rd
  2155.      *  bge  pcrel:16                 bst  #imm,@abs:8
  2156.         blt  pcrel:8                  btst #imm,rd
  2157.      *  blt  pcrel:16                 btst #imm,@rd
  2158.         bgt  pcrel:8                  btst #imm,@abs:8
  2159.      *  bgt  pcrel:16                 btst rs,rd
  2160.         ble  pcrel:8                  btst rs,@rd
  2161.      *  ble  pcrel:16                 btst rs,@abs:8
  2162.         bclr #imm,rd                  bxor #imm,rd
  2163.         bclr #imm,@rd                 bxor #imm,@rd
  2164.         bclr #imm,@abs:8              bxor #imm,@abs:8
  2165.         bclr rs,rd                    cmp.b #imm,rd
  2166.         bclr rs,@rd                   cmp.b rs,rd
  2167.         bclr rs,@abs:8                cmp.w rs,rd
  2168.         biand #imm,rd                 cmp.w rs,rd
  2169.         biand #imm,@rd             *  cmp.w #imm,rd
  2170.         biand #imm,@abs:8          *  cmp.l #imm,rd
  2171.         bild #imm,rd               *  cmp.l rs,rd
  2172.         bild #imm,@rd                 daa  rs
  2173.         bild #imm,@abs:8              das  rs
  2174.         bior #imm,rd                  dec.b rs
  2175.         bior #imm,@rd              *  dec.w #imm,rd
  2176.         bior #imm,@abs:8           *  dec.l #imm,rd
  2177.         bist #imm,rd                  divxu.b rs,rd
  2178.         bist #imm,@rd              *  divxu.w rs,rd
  2179.         bist #imm,@abs:8           *  divxs.b rs,rd
  2180.         bixor #imm,rd              *  divxs.w rs,rd
  2181.         bixor #imm,@rd                eepmov
  2182.         bixor #imm,@abs:8          *  eepmovw
  2183.      
  2184.      *  exts.w rd                     mov.w rs,@abs:16
  2185.      *  exts.l rd                  *  mov.l #imm,rd
  2186.      *  extu.w rd                  *  mov.l rs,rd
  2187.      *  extu.l rd                  *  mov.l @rs,rd
  2188.         inc  rs                    *  mov.l @(disp:16,rs),rd
  2189.      *  inc.w #imm,rd              *  mov.l @(disp:24,rs),rd
  2190.      *  inc.l #imm,rd              *  mov.l @rs+,rd
  2191.         jmp  @rs                   *  mov.l @abs:16,rd
  2192.         jmp  abs                   *  mov.l @abs:24,rd
  2193.         jmp  @@abs:8               *  mov.l rs,@rd
  2194.         jsr  @rs                   *  mov.l rs,@(disp:16,rd)
  2195.         jsr  abs                   *  mov.l rs,@(disp:24,rd)
  2196.         jsr  @@abs:8               *  mov.l rs,@-rd
  2197.         ldc  #imm,ccr              *  mov.l rs,@abs:16
  2198.         ldc  rs,ccr                *  mov.l rs,@abs:24
  2199.      *  ldc  @abs:16,ccr              movfpe @abs:16,rd
  2200.      *  ldc  @abs:24,ccr              movtpe rs,@abs:16
  2201.      *  ldc  @(disp:16,rs),ccr        mulxu.b rs,rd
  2202.      *  ldc  @(disp:24,rs),ccr     *  mulxu.w rs,rd
  2203.      *  ldc  @rs+,ccr              *  mulxs.b rs,rd
  2204.      *  ldc  @rs,ccr               *  mulxs.w rs,rd
  2205.      *  mov.b @(disp:24,rs),rd        neg.b rs
  2206.      *  mov.b rs,@(disp:24,rd)     *  neg.w rs
  2207.         mov.b @abs:16,rd           *  neg.l rs
  2208.         mov.b rs,rd                   nop
  2209.         mov.b @abs:8,rd               not.b rs
  2210.         mov.b rs,@abs:8            *  not.w rs
  2211.         mov.b rs,rd                *  not.l rs
  2212.         mov.b #imm,rd                 or.b #imm,rd
  2213.         mov.b @rs,rd                  or.b rs,rd
  2214.         mov.b @(disp:16,rs),rd     *  or.w #imm,rd
  2215.         mov.b @rs+,rd              *  or.w rs,rd
  2216.         mov.b @abs:8,rd            *  or.l #imm,rd
  2217.         mov.b rs,@rd               *  or.l rs,rd
  2218.         mov.b rs,@(disp:16,rd)        orc  #imm,ccr
  2219.         mov.b rs,@-rd                 pop.w rs
  2220.         mov.b rs,@abs:8            *  pop.l rs
  2221.         mov.w rs,@rd                  push.w rs
  2222.      *  mov.w @(disp:24,rs),rd     *  push.l rs
  2223.      *  mov.w rs,@(disp:24,rd)        rotl.b rs
  2224.      *  mov.w @abs:24,rd           *  rotl.w rs
  2225.      *  mov.w rs,@abs:24           *  rotl.l rs
  2226.         mov.w rs,rd                   rotr.b rs
  2227.         mov.w #imm,rd              *  rotr.w rs
  2228.         mov.w @rs,rd               *  rotr.l rs
  2229.         mov.w @(disp:16,rs),rd        rotxl.b rs
  2230.         mov.w @rs+,rd              *  rotxl.w rs
  2231.         mov.w @abs:16,rd           *  rotxl.l rs
  2232.         mov.w rs,@(disp:16,rd)        rotxr.b rs
  2233.         mov.w rs,@-rd              *  rotxr.w rs
  2234.      
  2235.      *  rotxr.l rs                 *  stc  ccr,@(disp:24,rd)
  2236.         bpt                        *  stc  ccr,@-rd
  2237.         rte                        *  stc  ccr,@abs:16
  2238.         rts                        *  stc  ccr,@abs:24
  2239.         shal.b rs                     sub.b rs,rd
  2240.      *  shal.w rs                     sub.w rs,rd
  2241.      *  shal.l rs                  *  sub.w #imm,rd
  2242.         shar.b rs                  *  sub.l rs,rd
  2243.      *  shar.w rs                  *  sub.l #imm,rd
  2244.      *  shar.l rs                     subs #imm,rd
  2245.         shll.b rs                     subx #imm,rd
  2246.      *  shll.w rs                     subx rs,rd
  2247.      *  shll.l rs                  *  trapa #imm
  2248.         shlr.b rs                     xor  #imm,rd
  2249.      *  shlr.w rs                     xor  rs,rd
  2250.      *  shlr.l rs                  *  xor.w #imm,rd
  2251.         sleep                      *  xor.w rs,rd
  2252.         stc  ccr,rd                *  xor.l #imm,rd
  2253.      *  stc  ccr,@rs               *  xor.l rs,rd
  2254.      *  stc  ccr,@(disp:16,rd)        xorc #imm,ccr
  2255.    Four H8/300 instructions (`add', `cmp', `mov', `sub') are defined
  2256. with variants using the suffixes `.b', `.w', and `.l' to specify the
  2257. size of a memory operand.  `as' supports these suffixes, but does not
  2258. require them; since one of the operands is always a register, `as' can
  2259. deduce the correct size.
  2260.    For example, since `r0' refers to a 16-bit register,
  2261.      mov    r0,@foo
  2262. is equivalent to
  2263.      mov.w  r0,@foo
  2264.    If you use the size suffixes, `as' issues a warning when the suffix
  2265. and the register size do not match.
  2266. File: as,  Node: H8/500-Dependent,  Next: SH-Dependent,  Prev: H8/300-Dependent,  Up: Machine Dependencies
  2267. H8/500 Dependent Features
  2268. =========================
  2269. * Menu:
  2270. * H8/500 Options::              Options
  2271. * H8/500 Syntax::               Syntax
  2272. * H8/500 Floating Point::       Floating Point
  2273. * H8/500 Directives::           H8/500 Machine Directives
  2274. * H8/500 Opcodes::              Opcodes
  2275. File: as,  Node: H8/500 Options,  Next: H8/500 Syntax,  Up: H8/500-Dependent
  2276. Options
  2277. -------
  2278.    `as' has no additional command-line options for the Hitachi H8/500
  2279. family.
  2280. File: as,  Node: H8/500 Syntax,  Next: H8/500 Floating Point,  Prev: H8/500 Options,  Up: H8/500-Dependent
  2281. Syntax
  2282. ------
  2283. * Menu:
  2284. * H8/500-Chars::                Special Characters
  2285. * H8/500-Regs::                 Register Names
  2286. * H8/500-Addressing::           Addressing Modes
  2287. File: as,  Node: H8/500-Chars,  Next: H8/500-Regs,  Up: H8/500 Syntax
  2288. Special Characters
  2289. ..................
  2290.    `!' is the line comment character.
  2291.    `;' can be used instead of a newline to separate statements.
  2292.    Since `$' has no special meaning, you may use it in symbol names.
  2293. File: as,  Node: H8/500-Regs,  Next: H8/500-Addressing,  Prev: H8/500-Chars,  Up: H8/500 Syntax
  2294. Register Names
  2295. ..............
  2296.    You can use the predefined symbols `r0', `r1', `r2', `r3', `r4',
  2297. `r5', `r6', and `r7' to refer to the H8/500 registers.
  2298.    The H8/500 also has these control registers:
  2299.      code pointer
  2300.      data pointer
  2301.      base pointer
  2302.      stack top pointer
  2303.      extra pointer
  2304.      status register
  2305. `ccr'
  2306.      condition code register
  2307.    All registers are 16 bits long.  To represent 32 bit numbers, use two
  2308. adjacent registers; for distant memory addresses, use one of the segment
  2309. pointers (`cp' for the program counter; `dp' for `r0'-`r3'; `ep' for
  2310. `r4' and `r5'; and `tp' for `r6' and `r7'.
  2311. File: as,  Node: H8/500-Addressing,  Prev: H8/500-Regs,  Up: H8/500 Syntax
  2312. Addressing Modes
  2313. ................
  2314.    as understands the following addressing modes for the H8/500:
  2315.      Register direct
  2316. `@RN'
  2317.      Register indirect
  2318. `@(d:8, RN)'
  2319.      Register indirect with 8 bit signed displacement
  2320. `@(d:16, RN)'
  2321.      Register indirect with 16 bit signed displacement
  2322. `@-RN'
  2323.      Register indirect with pre-decrement
  2324. `@RN+'
  2325.      Register indirect with post-increment
  2326. `@AA:8'
  2327.      8 bit absolute address
  2328. `@AA:16'
  2329.      16 bit absolute address
  2330. `#XX:8'
  2331.      8 bit immediate
  2332. `#XX:16'
  2333.      16 bit immediate
  2334. File: as,  Node: H8/500 Floating Point,  Next: H8/500 Directives,  Prev: H8/500 Syntax,  Up: H8/500-Dependent
  2335. Floating Point
  2336. --------------
  2337.    The H8/500 family uses IEEE floating-point numbers.
  2338. File: as,  Node: H8/500 Directives,  Next: H8/500 Opcodes,  Prev: H8/500 Floating Point,  Up: H8/500-Dependent
  2339. H8/500 Machine Directives
  2340. -------------------------
  2341.    `as' has no machine-dependent directives for the H8/500.  However,
  2342. on this platform the `.int' and `.word' directives generate 16-bit
  2343. numbers.
  2344. File: as,  Node: H8/500 Opcodes,  Prev: H8/500 Directives,  Up: H8/500-Dependent
  2345. Opcodes
  2346. -------
  2347.    For detailed information on the H8/500 machine instruction set, see
  2348. `H8/500 Series Programming Manual' (Hitachi M21T001).
  2349.    `as' implements all the standard H8/500 opcodes.  No additional
  2350. pseudo-instructions are needed on this family.
  2351.    The following table summarizes H8/500 opcodes and their operands:
  2352.      Legend:
  2353.      abs8      8-bit absolute address
  2354.      abs16     16-bit absolute address
  2355.      abs24     24-bit absolute address
  2356.      crb       `ccr', `br', `ep', `dp', `tp', `dp'
  2357.      disp8     8-bit displacement
  2358.      ea        `rn', `@rn', `@(d:8, rn)', `@(d:16, rn)',
  2359.                `@-rn', `@rn+', `@aa:8', `@aa:16',
  2360.                `#xx:8', `#xx:16'
  2361.      ea_mem    `@rn', `@(d:8, rn)', `@(d:16, rn)',
  2362.                `@-rn', `@rn+', `@aa:8', `@aa:16'
  2363.      ea_noimm  `rn', `@rn', `@(d:8, rn)', `@(d:16, rn)',
  2364.                `@-rn', `@rn+', `@aa:8', `@aa:16'
  2365.      fp        r6
  2366.      imm4      4-bit immediate data
  2367.      imm8      8-bit immediate data
  2368.      imm16     16-bit immediate data
  2369.      pcrel8    8-bit offset from program counter
  2370.      pcrel16   16-bit offset from program counter
  2371.      qim       `-2', `-1', `1', `2'
  2372.      rd        any register
  2373.      rs        a register distinct from rd
  2374.      rlist     comma-separated list of registers in parentheses;
  2375.                register ranges `rd-rs' are allowed
  2376.      sp        stack pointer (`r7')
  2377.      sr        status register
  2378.      sz        size; `.b' or `.w'.  If omitted, default `.w'
  2379.      
  2380.      ldc[.b] ea,crb                 bcc[.w] pcrel16
  2381.      ldc[.w] ea,sr                  bcc[.b] pcrel8
  2382.      add[:q] sz qim,ea_noimm        bhs[.w] pcrel16
  2383.      add[:g] sz ea,rd               bhs[.b] pcrel8
  2384.      adds sz ea,rd                  bcs[.w] pcrel16
  2385.      addx sz ea,rd                  bcs[.b] pcrel8
  2386.      and sz ea,rd                   blo[.w] pcrel16
  2387.      andc[.b] imm8,crb              blo[.b] pcrel8
  2388.      andc[.w] imm16,sr              bne[.w] pcrel16
  2389.      bpt                            bne[.b] pcrel8
  2390.      bra[.w] pcrel16                beq[.w] pcrel16
  2391.      bra[.b] pcrel8                 beq[.b] pcrel8
  2392.      bt[.w] pcrel16                 bvc[.w] pcrel16
  2393.      bt[.b] pcrel8                  bvc[.b] pcrel8
  2394.      brn[.w] pcrel16                bvs[.w] pcrel16
  2395.      brn[.b] pcrel8                 bvs[.b] pcrel8
  2396.      bf[.w] pcrel16                 bpl[.w] pcrel16
  2397.      bf[.b] pcrel8                  bpl[.b] pcrel8
  2398.      bhi[.w] pcrel16                bmi[.w] pcrel16
  2399.      bhi[.b] pcrel8                 bmi[.b] pcrel8
  2400.      bls[.w] pcrel16                bge[.w] pcrel16
  2401.      bls[.b] pcrel8                 bge[.b] pcrel8
  2402.      
  2403.      blt[.w] pcrel16                mov[:g][.b] imm8,ea_mem
  2404.      blt[.b] pcrel8                 mov[:g][.w] imm16,ea_mem
  2405.      bgt[.w] pcrel16                movfpe[.b] ea,rd
  2406.      bgt[.b] pcrel8                 movtpe[.b] rs,ea_noimm
  2407.      ble[.w] pcrel16                mulxu sz ea,rd
  2408.      ble[.b] pcrel8                 neg sz ea
  2409.      bclr sz imm4,ea_noimm          nop
  2410.      bclr sz rs,ea_noimm            not sz ea
  2411.      bnot sz imm4,ea_noimm          or sz ea,rd
  2412.      bnot sz rs,ea_noimm            orc[.b] imm8,crb
  2413.      bset sz imm4,ea_noimm          orc[.w] imm16,sr
  2414.      bset sz rs,ea_noimm            pjmp abs24
  2415.      bsr[.b] pcrel8                 pjmp @rd
  2416.      bsr[.w] pcrel16                pjsr abs24
  2417.      btst sz imm4,ea_noimm          pjsr @rd
  2418.      btst sz rs,ea_noimm            prtd imm8
  2419.      clr sz ea                      prtd imm16
  2420.      cmp[:e][.b] imm8,rd            prts
  2421.      cmp[:i][.w] imm16,rd           rotl sz ea
  2422.      cmp[:g].b imm8,ea_noimm        rotr sz ea
  2423.      cmp[:g][.w] imm16,ea_noimm     rotxl sz ea
  2424.      Cmp[:g] sz ea,rd               rotxr sz ea
  2425.      dadd rs,rd                     rtd imm8
  2426.      divxu sz ea,rd                 rtd imm16
  2427.      dsub rs,rd                     rts
  2428.      exts[.b] rd                    scb/f rs,pcrel8
  2429.      extu[.b] rd                    scb/ne rs,pcrel8
  2430.      jmp @rd                        scb/eq rs,pcrel8
  2431.      jmp @(imm8,rd)                 shal sz ea
  2432.      jmp @(imm16,rd)                shar sz ea
  2433.      jmp abs16                      shll sz ea
  2434.      jsr @rd                        shlr sz ea
  2435.      jsr @(imm8,rd)                 sleep
  2436.      jsr @(imm16,rd)                stc[.b] crb,ea_noimm
  2437.      jsr abs16                      stc[.w] sr,ea_noimm
  2438.      ldm @sp+,(rlist)               stm (rlist),@-sp
  2439.      link fp,imm8                   sub sz ea,rd
  2440.      link fp,imm16                  subs sz ea,rd
  2441.      mov[:e][.b] imm8,rd            subx sz ea,rd
  2442.      mov[:i][.w] imm16,rd           swap[.b] rd
  2443.      mov[:l][.w] abs8,rd            tas[.b] ea
  2444.      mov[:l].b abs8,rd              trapa imm4
  2445.      mov[:s][.w] rs,abs8            trap/vs
  2446.      mov[:s].b rs,abs8              tst sz ea
  2447.      mov[:f][.w] @(disp8,fp),rd     unlk fp
  2448.      mov[:f][.w] rs,@(disp8,fp)     xch[.w] rs,rd
  2449.      mov[:f].b @(disp8,fp),rd       xor sz ea,rd
  2450.      mov[:f].b rs,@(disp8,fp)       xorc.b imm8,crb
  2451.      mov[:g] sz rs,ea_mem           xorc.w imm16,sr
  2452.      mov[:g] sz ea,rd
  2453. File: as,  Node: SH-Dependent,  Next: i960-Dependent,  Prev: H8/500-Dependent,  Up: Machine Dependencies
  2454. Hitachi SH Dependent Features
  2455. =============================
  2456. * Menu:
  2457. * SH Options::              Options
  2458. * SH Syntax::               Syntax
  2459. * SH Floating Point::       Floating Point
  2460. * SH Directives::           SH Machine Directives
  2461. * SH Opcodes::              Opcodes
  2462. File: as,  Node: SH Options,  Next: SH Syntax,  Up: SH-Dependent
  2463. Options
  2464. -------
  2465.    `as' has no additional command-line options for the Hitachi SH
  2466. family.
  2467. File: as,  Node: SH Syntax,  Next: SH Floating Point,  Prev: SH Options,  Up: SH-Dependent
  2468. Syntax
  2469. ------
  2470. * Menu:
  2471. * SH-Chars::                Special Characters
  2472. * SH-Regs::                 Register Names
  2473. * SH-Addressing::           Addressing Modes
  2474. File: as,  Node: SH-Chars,  Next: SH-Regs,  Up: SH Syntax
  2475. Special Characters
  2476. ..................
  2477.    `!' is the line comment character.
  2478.    You can use `;' instead of a newline to separate statements.
  2479.    Since `$' has no special meaning, you may use it in symbol names.
  2480. File: as,  Node: SH-Regs,  Next: SH-Addressing,  Prev: SH-Chars,  Up: SH Syntax
  2481. Register Names
  2482. ..............
  2483.    You can use the predefined symbols `r0', `r1', `r2', `r3', `r4',
  2484. `r5', `r6', `r7', `r8', `r9', `r10', `r11', `r12', `r13', `r14', and
  2485. `r15' to refer to the SH registers.
  2486.    The SH also has these control registers:
  2487.      procedure register (holds return address)
  2488.      program counter
  2489. `mach'
  2490. `macl'
  2491.      high and low multiply accumulator registers
  2492.      status register
  2493. `gbr'
  2494.      global base register
  2495. `vbr'
  2496.      vector base register (for interrupt vectors)
  2497. File: as,  Node: SH-Addressing,  Prev: SH-Regs,  Up: SH Syntax
  2498. Addressing Modes
  2499. ................
  2500.    `as' understands the following addressing modes for the SH.  `RN' in
  2501. the following refers to any of the numbered registers, but *not* the
  2502. control registers.
  2503.      Register direct
  2504. `@RN'
  2505.      Register indirect
  2506. `@-RN'
  2507.      Register indirect with pre-decrement
  2508. `@RN+'
  2509.      Register indirect with post-increment
  2510. `@(DISP, RN)'
  2511.      Register indirect with displacement
  2512. `@(R0, RN)'
  2513.      Register indexed
  2514. `@(DISP, GBR)'
  2515.      `GBR' offset
  2516. `@(R0, GBR)'
  2517.      GBR indexed
  2518. `ADDR'
  2519. `@(DISP, PC)'
  2520.      PC relative address (for branch or for addressing memory).  The
  2521.      `as' implementation allows you to use the simpler form ADDR
  2522.      anywhere a PC relative address is called for; the alternate form
  2523.      is supported for compatibility with other assemblers.
  2524. `#IMM'
  2525.      Immediate data
  2526. File: as,  Node: SH Floating Point,  Next: SH Directives,  Prev: SH Syntax,  Up: SH-Dependent
  2527. Floating Point
  2528. --------------
  2529.    The SH family uses IEEE floating-point numbers.
  2530. File: as,  Node: SH Directives,  Next: SH Opcodes,  Prev: SH Floating Point,  Up: SH-Dependent
  2531. SH Machine Directives
  2532. ---------------------
  2533.    `as' has no machine-dependent directives for the SH.
  2534. File: as,  Node: SH Opcodes,  Prev: SH Directives,  Up: SH-Dependent
  2535. Opcodes
  2536. -------
  2537.    For detailed information on the SH machine instruction set, see
  2538. `SH-Microcomputer User's Manual' (Hitachi Micro Systems, Inc.).
  2539.    `as' implements all the standard SH opcodes.  No additional
  2540. pseudo-instructions are needed on this family.  Note, however, that
  2541. because `as' supports a simpler form of PC-relative addressing, you may
  2542. simply write (for example)
  2543.      mov.l  bar,r0
  2544. where other assemblers might require an explicit displacement to `bar'
  2545. from the program counter:
  2546.      mov.l  @(DISP, PC)
  2547.    Here is a summary of SH opcodes:
  2548.      Legend:
  2549.      Rn        a numbered register
  2550.      Rm        another numbered register
  2551.      #imm      immediate data
  2552.      disp      displacement
  2553.      disp8     8-bit displacement
  2554.      disp12    12-bit displacement
  2555.      
  2556.      add #imm,Rn                    lds.l @Rn+,PR
  2557.      add Rm,Rn                      mac.w @Rm+,@Rn+
  2558.      addc Rm,Rn                     mov #imm,Rn
  2559.      addv Rm,Rn                     mov Rm,Rn
  2560.      and #imm,R0                    mov.b Rm,@(R0,Rn)
  2561.      and Rm,Rn                      mov.b Rm,@-Rn
  2562.      and.b #imm,@(R0,GBR)           mov.b Rm,@Rn
  2563.      bf disp8                       mov.b @(disp,Rm),R0
  2564.      bra disp12                     mov.b @(disp,GBR),R0
  2565.      bsr disp12                     mov.b @(R0,Rm),Rn
  2566.      bt disp8                       mov.b @Rm+,Rn
  2567.      clrm                           mov.b @Rm,Rn
  2568.      clrt                           mov.b R0,@(disp,Rm)
  2569.      cmp/eq #imm,R0                 mov.b R0,@(disp,GBR)
  2570.      cmp/eq Rm,Rn                   mov.l Rm,@(disp,Rn)
  2571.      cmp/ge Rm,Rn                   mov.l Rm,@(R0,Rn)
  2572.      cmp/gt Rm,Rn                   mov.l Rm,@-Rn
  2573.      cmp/hi Rm,Rn                   mov.l Rm,@Rn
  2574.      cmp/hs Rm,Rn                   mov.l @(disp,Rn),Rm
  2575.      cmp/pl Rn                      mov.l @(disp,GBR),R0
  2576.      cmp/pz Rn                      mov.l @(disp,PC),Rn
  2577.      cmp/str Rm,Rn                  mov.l @(R0,Rm),Rn
  2578.      div0s Rm,Rn                    mov.l @Rm+,Rn
  2579.      div0u                          mov.l @Rm,Rn
  2580.      div1 Rm,Rn                     mov.l R0,@(disp,GBR)
  2581.      exts.b Rm,Rn                   mov.w Rm,@(R0,Rn)
  2582.      exts.w Rm,Rn                   mov.w Rm,@-Rn
  2583.      extu.b Rm,Rn                   mov.w Rm,@Rn
  2584.      extu.w Rm,Rn                   mov.w @(disp,Rm),R0
  2585.      jmp @Rn                        mov.w @(disp,GBR),R0
  2586.      jsr @Rn                        mov.w @(disp,PC),Rn
  2587.      ldc Rn,GBR                     mov.w @(R0,Rm),Rn
  2588.      ldc Rn,SR                      mov.w @Rm+,Rn
  2589.      ldc Rn,VBR                     mov.w @Rm,Rn
  2590.      ldc.l @Rn+,GBR                 mov.w R0,@(disp,Rm)
  2591.      ldc.l @Rn+,SR                  mov.w R0,@(disp,GBR)
  2592.      ldc.l @Rn+,VBR                 mova @(disp,PC),R0
  2593.      lds Rn,MACH                    movt Rn
  2594.      lds Rn,MACL                    muls Rm,Rn
  2595.      lds Rn,PR                      mulu Rm,Rn
  2596.      lds.l @Rn+,MACH                neg Rm,Rn
  2597.      lds.l @Rn+,MACL                negc Rm,Rn
  2598.      
  2599.      nop                            stc VBR,Rn
  2600.      not Rm,Rn                      stc.l GBR,@-Rn
  2601.      or #imm,R0                     stc.l SR,@-Rn
  2602.      or Rm,Rn                       stc.l VBR,@-Rn
  2603.      or.b #imm,@(R0,GBR)            sts MACH,Rn
  2604.      rotcl Rn                       sts MACL,Rn
  2605.      rotcr Rn                       sts PR,Rn
  2606.      rotl Rn                        sts.l MACH,@-Rn
  2607.      rotr Rn                        sts.l MACL,@-Rn
  2608.      rte                            sts.l PR,@-Rn
  2609.      rts                            sub Rm,Rn
  2610.      sett                           subc Rm,Rn
  2611.      shal Rn                        subv Rm,Rn
  2612.      shar Rn                        swap.b Rm,Rn
  2613.      shll Rn                        swap.w Rm,Rn
  2614.      shll16 Rn                      tas.b @Rn
  2615.      shll2 Rn                       trapa #imm
  2616.      shll8 Rn                       tst #imm,R0
  2617.      shlr Rn                        tst Rm,Rn
  2618.      shlr16 Rn                      tst.b #imm,@(R0,GBR)
  2619.      shlr2 Rn                       xor #imm,R0
  2620.      shlr8 Rn                       xor Rm,Rn
  2621.      sleep                          xor.b #imm,@(R0,GBR)
  2622.      stc GBR,Rn                     xtrct Rm,Rn
  2623.      stc SR,Rn
  2624. File: as,  Node: i960-Dependent,  Next: M68K-Dependent,  Prev: SH-Dependent,  Up: Machine Dependencies
  2625. Intel 80960 Dependent Features
  2626. ==============================
  2627. * Menu:
  2628. * Options-i960::                i960 Command-line Options
  2629. * Floating Point-i960::         Floating Point
  2630. * Directives-i960::             i960 Machine Directives
  2631. * Opcodes for i960::            i960 Opcodes
  2632. File: as,  Node: Options-i960,  Next: Floating Point-i960,  Up: i960-Dependent
  2633. i960 Command-line Options
  2634. -------------------------
  2635. `-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC'
  2636.      Select the 80960 architecture.  Instructions or features not
  2637.      supported by the selected architecture cause fatal errors.
  2638.      `-ACA' is equivalent to `-ACA_A'; `-AKC' is equivalent to `-AMC'.
  2639.      Synonyms are provided for compatibility with other tools.
  2640.      If none of these options is specified, `as' will generate code for
  2641.      any instruction or feature that is supported by *some* version of
  2642.      the 960 (even if this means mixing architectures!).  In principle,
  2643.      `as' will attempt to deduce the minimal sufficient processor type
  2644.      if none is specified; depending on the object code format, the
  2645.      processor type may be recorded in the object file.  If it is
  2646.      critical that the `as' output match a specific architecture,
  2647.      specify that architecture explicitly.
  2648.      Add code to collect information about conditional branches taken,
  2649.      for later optimization using branch prediction bits.  (The
  2650.      conditional branch instructions have branch prediction bits in the
  2651.      CA, CB, and CC architectures.)  If BR represents a conditional
  2652.      branch instruction, the following represents the code generated by
  2653.      the assembler when `-b' is specified:
  2654.                   call    INCREMENT ROUTINE
  2655.                   .word   0       # pre-counter
  2656.           Label:  BR
  2657.                   call    INCREMENT ROUTINE
  2658.                   .word   0       # post-counter
  2659.      The counter following a branch records the number of times that
  2660.      branch was *not* taken; the differenc between the two counters is
  2661.      the number of times the branch *was* taken.
  2662.      A table of every such `Label' is also generated, so that the
  2663.      external postprocessor `gbr960' (supplied by Intel) can locate all
  2664.      the counters.  This table is always labelled `__BRANCH_TABLE__';
  2665.      this is a local symbol to permit collecting statistics for many
  2666.      separate object files.  The table is word aligned, and begins with
  2667.      a two-word header.  The first word, initialized to 0, is used in
  2668.      maintaining linked lists of branch tables.  The second word is a
  2669.      count of the number of entries in the table, which follow
  2670.      immediately: each is a word, pointing to one of the labels
  2671.      illustrated above.
  2672.            +------------+------------+------------+ ... +------------+
  2673.            |            |            |            |     |            |
  2674.            |  *NEXT     |  COUNT: N  | *BRLAB 1   |     | *BRLAB N   |
  2675.            |            |            |            |     |            |
  2676.            +------------+------------+------------+ ... +------------+
  2677.           
  2678.                          __BRANCH_TABLE__ layout
  2679.      The first word of the header is used to locate multiple branch
  2680.      tables, since each object file may contain one. Normally the links
  2681.      are maintained with a call to an initialization routine, placed at
  2682.      the beginning of each function in the file.  The GNU C compiler
  2683.      will generate these calls automatically when you give it a `-b'
  2684.      option.  For further details, see the documentation of `gbr960'.
  2685. `-norelax'
  2686.      Normally, Compare-and-Branch instructions with targets that require
  2687.      displacements greater than 13 bits (or that have external targets)
  2688.      are replaced with the corresponding compare (or `chkbit') and
  2689.      branch instructions.  You can use the `-norelax' option to specify
  2690.      that `as' should generate errors instead, if the target
  2691.      displacement is larger than 13 bits.
  2692.      This option does not affect the Compare-and-Jump instructions; the
  2693.      code emitted for them is *always* adjusted when necessary
  2694.      (depending on displacement size), regardless of whether you use
  2695.      `-norelax'.
  2696. File: as,  Node: Floating Point-i960,  Next: Directives-i960,  Prev: Options-i960,  Up: i960-Dependent
  2697. Floating Point
  2698. --------------
  2699.    `as' generates IEEE floating-point numbers for the directives
  2700. `.float', `.double', `.extended', and `.single'.
  2701. File: as,  Node: Directives-i960,  Next: Opcodes for i960,  Prev: Floating Point-i960,  Up: i960-Dependent
  2702. i960 Machine Directives
  2703. -----------------------
  2704. `.bss SYMBOL, LENGTH, ALIGN'
  2705.      Reserve LENGTH bytes in the bss section for a local SYMBOL,
  2706.      aligned to the power of two specified by ALIGN.  LENGTH and ALIGN
  2707.      must be positive absolute expressions.  This directive differs
  2708.      from `.lcomm' only in that it permits you to specify an alignment.
  2709.      *Note `.lcomm': Lcomm.
  2710. `.extended FLONUMS'
  2711.      `.extended' expects zero or more flonums, separated by commas; for
  2712.      each flonum, `.extended' emits an IEEE extended-format (80-bit)
  2713.      floating-point number.
  2714. `.leafproc CALL-LAB, BAL-LAB'
  2715.      You can use the `.leafproc' directive in conjunction with the
  2716.      optimized `callj' instruction to enable faster calls of leaf
  2717.      procedures.  If a procedure is known to call no other procedures,
  2718.      you may define an entry point that skips procedure prolog code
  2719.      (and that does not depend on system-supplied saved context), and
  2720.      declare it as the BAL-LAB using `.leafproc'.  If the procedure
  2721.      also has an entry point that goes through the normal prolog, you
  2722.      can specify that entry point as CALL-LAB.
  2723.      A `.leafproc' declaration is meant for use in conjunction with the
  2724.      optimized call instruction `callj'; the directive records the data
  2725.      needed later to choose between converting the `callj' into a `bal'
  2726.      or a `call'.
  2727.      CALL-LAB is optional; if only one argument is present, or if the
  2728.      two arguments are identical, the single argument is assumed to be
  2729.      the `bal' entry point.
  2730. `.sysproc NAME, INDEX'
  2731.      The `.sysproc' directive defines a name for a system procedure.
  2732.      After you define it using `.sysproc', you can use NAME to refer to
  2733.      the system procedure identified by INDEX when calling procedures
  2734.      with the optimized call instruction `callj'.
  2735.      Both arguments are required; INDEX must be between 0 and 31
  2736.      (inclusive).
  2737. File: as,  Node: Opcodes for i960,  Prev: Directives-i960,  Up: i960-Dependent
  2738. i960 Opcodes
  2739. ------------
  2740.    All Intel 960 machine instructions are supported; *note i960
  2741. Command-line Options: Options-i960. for a discussion of selecting the
  2742. instruction subset for a particular 960 architecture.
  2743.    Some opcodes are processed beyond simply emitting a single
  2744. corresponding instruction: `callj', and Compare-and-Branch or
  2745. Compare-and-Jump instructions with target displacements larger than 13
  2746. bits.
  2747. * Menu:
  2748. * callj-i960::                  `callj'
  2749. * Compare-and-branch-i960::     Compare-and-Branch
  2750. File: as,  Node: callj-i960,  Next: Compare-and-branch-i960,  Up: Opcodes for i960
  2751. `callj'
  2752. .......
  2753.    You can write `callj' to have the assembler or the linker determine
  2754. the most appropriate form of subroutine call: `call', `bal', or
  2755. `calls'.  If the assembly source contains enough information--a
  2756. `.leafproc' or `.sysproc' directive defining the operand--then `as'
  2757. will translate the `callj'; if not, it will simply emit the `callj',
  2758. leaving it for the linker to resolve.
  2759. File: as,  Node: Compare-and-branch-i960,  Prev: callj-i960,  Up: Opcodes for i960
  2760. Compare-and-Branch
  2761. ..................
  2762.    The 960 architectures provide combined Compare-and-Branch
  2763. instructions that permit you to store the branch target in the lower 13
  2764. bits of the instruction word itself.  However, if you specify a branch
  2765. target far enough away that its address won't fit in 13 bits, the
  2766. assembler can either issue an error, or convert your Compare-and-Branch
  2767. instruction into separate instructions to do the compare and the branch.
  2768.    Whether `as' gives an error or expands the instruction depends on
  2769. two choices you can make: whether you use the `-norelax' option, and
  2770. whether you use a "Compare and Branch" instruction or a "Compare and
  2771. Jump" instruction.  The "Jump" instructions are *always* expanded if
  2772. necessary; the "Branch" instructions are expanded when necessary
  2773. *unless* you specify `-norelax'--in which case `as' gives an error
  2774. instead.
  2775.    These are the Compare-and-Branch instructions, their "Jump" variants,
  2776. and the instruction pairs they may expand into:
  2777.              Compare and
  2778.           Branch      Jump       Expanded to
  2779.           ------    ------       ------------
  2780.              bbc                 chkbit; bno
  2781.              bbs                 chkbit; bo
  2782.           cmpibe    cmpije       cmpi; be
  2783.           cmpibg    cmpijg       cmpi; bg
  2784.          cmpibge   cmpijge       cmpi; bge
  2785.           cmpibl    cmpijl       cmpi; bl
  2786.          cmpible   cmpijle       cmpi; ble
  2787.          cmpibno   cmpijno       cmpi; bno
  2788.          cmpibne   cmpijne       cmpi; bne
  2789.           cmpibo    cmpijo       cmpi; bo
  2790.           cmpobe    cmpoje       cmpo; be
  2791.           cmpobg    cmpojg       cmpo; bg
  2792.          cmpobge   cmpojge       cmpo; bge
  2793.           cmpobl    cmpojl       cmpo; bl
  2794.          cmpoble   cmpojle       cmpo; ble
  2795.          cmpobne   cmpojne       cmpo; bne
  2796. File: as,  Node: M68K-Dependent,  Next: Sparc-Dependent,  Prev: i960-Dependent,  Up: Machine Dependencies
  2797. M680x0 Dependent Features
  2798. =========================
  2799. * Menu:
  2800. * M68K-Opts::                   M680x0 Options
  2801. * M68K-Syntax::                 Syntax
  2802. * M68K-Moto-Syntax::            Motorola Syntax
  2803. * M68K-Float::                  Floating Point
  2804. * M68K-Directives::             680x0 Machine Directives
  2805. * M68K-opcodes::                Opcodes
  2806. File: as,  Node: M68K-Opts,  Next: M68K-Syntax,  Up: M68K-Dependent
  2807. M680x0 Options
  2808. --------------
  2809.    The Motorola 680x0 version of `as' has two machine dependent options.
  2810. One shortens undefined references from 32 to 16 bits, while the other
  2811. is used to tell `as' what kind of machine it is assembling for.
  2812.    You can use the `-l' option to shorten the size of references to
  2813. undefined symbols.  If the `-l' option is not given, references to
  2814. undefined symbols will be a full long (32 bits) wide.  (Since `as'
  2815. cannot know where these symbols will end up, `as' can only allocate
  2816. space for the linker to fill in later.  Since `as' doesn't know how far
  2817. away these symbols will be, it allocates as much space as it can.) If
  2818. this option is given, the references will only be one word wide (16
  2819. bits).  This may be useful if you want the object file to be as small as
  2820. possible, and you know that the relevant symbols will be less than 17
  2821. bits away.
  2822.    The 680x0 version of `as' is most frequently used to assemble
  2823. programs for the Motorola MC68020 microprocessor.  Occasionally it is
  2824. used to assemble programs for the mostly similar, but slightly different
  2825. MC68000 or MC68010 microprocessors.  You can give `as' the options
  2826. `-m68000', `-mc68000', `-m68010', `-mc68010', `-m68020', and `-mc68020'
  2827. to tell it what processor is the target.
  2828. File: as,  Node: M68K-Syntax,  Next: M68K-Moto-Syntax,  Prev: M68K-Opts,  Up: M68K-Dependent
  2829. Syntax
  2830. ------
  2831.    This syntax for the Motorola 680x0 was developed at MIT.
  2832.    The 680x0 version of `as' uses syntax similar to the Sun assembler.
  2833. Intervening periods are now ignored; for example, `movl' is equivalent
  2834. to `move.l'.
  2835.    In the following table "apc" stands for any of the address registers
  2836. (`a0' through `a7'), nothing, (`'), the Program Counter (`pc'), or the
  2837. zero-address relative to the program counter (`zpc').
  2838.    The following addressing modes are understood:
  2839. "Immediate"
  2840.      `#DIGITS'
  2841. "Data Register"
  2842.      `d0' through `d7'
  2843. "Address Register"
  2844.      `a0' through `a7'
  2845. "Address Register Indirect"
  2846.      `a0@' through `a7@'
  2847.      `a7' is also known as `sp', i.e. the Stack Pointer.  `a6' is also
  2848.      known as `fp', the Frame Pointer.
  2849. "Address Register Postincrement"
  2850.      `a0@+' through `a7@+'
  2851. "Address Register Predecrement"
  2852.      `a0@-' through `a7@-'
  2853. "Indirect Plus Offset"
  2854.      `APC@(DIGITS)'
  2855. "Index"
  2856.      `APC@(DIGITS,REGISTER:SIZE:SCALE)'
  2857.      or `APC@(REGISTER:SIZE:SCALE)'
  2858. "Postindex"
  2859.      `APC@(DIGITS)@(DIGITS,REGISTER:SIZE:SCALE)'
  2860.      or `APC@(DIGITS)@(REGISTER:SIZE:SCALE)'
  2861. "Preindex"
  2862.      `APC@(DIGITS,REGISTER:SIZE:SCALE)@(DIGITS)'
  2863.      or `APC@(REGISTER:SIZE:SCALE)@(DIGITS)'
  2864. "Memory Indirect"
  2865.      `APC@(DIGITS)@(DIGITS)'
  2866. "Absolute"
  2867.      `SYMBOL', or `DIGITS'
  2868.    For some configurations, especially those where the compiler normally
  2869. does not prepend an underscore to the names of user variables, the
  2870. assembler requires a `%' before any use of a register name.  This is
  2871. intended to let the assembler distinguish between user variables and
  2872. registers named `a0' through `a7', et cetera.  The `%' is always
  2873. accepted, but is only required for some configurations, notably
  2874. `m68k-coff'.
  2875. File: as,  Node: M68K-Moto-Syntax,  Next: M68K-Float,  Prev: M68K-Syntax,  Up: M68K-Dependent
  2876. Motorola Syntax
  2877. ---------------
  2878.    The standard Motorola syntax for this chip differs from the syntax
  2879. already discussed (*note Syntax: M68K-Syntax.).  `as' can accept both
  2880. kinds of syntax, even within a single instruction.  The syntaxes are
  2881. fully compatible, because the Motorola syntax never uses the `@'
  2882. character and the MIT syntax always does, except in cases where the
  2883. syntaxes are identical.
  2884.    In particular, you may write or generate M68K assembler with the
  2885. following conventions:
  2886.    (In the following table "apc" stands for any of the address
  2887. registers (`a0' through `a7'), nothing, (`'), the Program Counter
  2888. (`pc'), or the zero-address relative to the program counter (`zpc').)
  2889.    The following additional addressing modes are understood:
  2890. "Address Register Indirect"
  2891.      `a0' through `a7'
  2892.      `a7' is also known as `sp', i.e. the Stack Pointer.  `a6' is also
  2893.      known as `fp', the Frame Pointer.
  2894. "Address Register Postincrement"
  2895.      `(a0)+' through `(a7)+'
  2896. "Address Register Predecrement"
  2897.      `-(a0)' through `-(a7)'
  2898. "Indirect Plus Offset"
  2899.      `DIGITS(APC)'
  2900. "Index"
  2901.      `DIGITS(APC,(REGISTER.SIZE*SCALE)'
  2902.      or `(APC,REGISTER.SIZE*SCALE)'
  2903.      In either case, SIZE and SCALE are optional (SCALE defaults to
  2904.      `1', SIZE defaults to `l').   SCALE can be `1', `2', `4', or `8'.
  2905.      SIZE can be `w' or `l'.  SCALE is only supported on the 68020 and
  2906.      greater.
  2907. File: as,  Node: M68K-Float,  Next: M68K-Directives,  Prev: M68K-Moto-Syntax,  Up: M68K-Dependent
  2908. Floating Point
  2909. --------------
  2910.    The floating point code is not too well tested, and may have subtle
  2911. bugs in it.
  2912.    Packed decimal (P) format floating literals are not supported.  Feel
  2913. free to add the code!
  2914.    The floating point formats generated by directives are these.
  2915. `.float'
  2916.      `Single' precision floating point constants.
  2917. `.double'
  2918.      `Double' precision floating point constants.
  2919.    There is no directive to produce regions of memory holding extended
  2920. precision numbers, however they can be used as immediate operands to
  2921. floating-point instructions.  Adding a directive to create extended
  2922. precision numbers would not be hard, but it has not yet seemed
  2923. necessary.
  2924. File: as,  Node: M68K-Directives,  Next: M68K-opcodes,  Prev: M68K-Float,  Up: M68K-Dependent
  2925. 680x0 Machine Directives
  2926. ------------------------
  2927.    In order to be compatible with the Sun assembler the 680x0 assembler
  2928. understands the following directives.
  2929. `.data1'
  2930.      This directive is identical to a `.data 1' directive.
  2931. `.data2'
  2932.      This directive is identical to a `.data 2' directive.
  2933. `.even'
  2934.      This directive is identical to a `.align 1' directive.
  2935. `.skip'
  2936.      This directive is identical to a `.space' directive.
  2937. File: as,  Node: M68K-opcodes,  Prev: M68K-Directives,  Up: M68K-Dependent
  2938. Opcodes
  2939. -------
  2940. * Menu:
  2941. * M68K-Branch::                 Branch Improvement
  2942. * M68K-Chars::                  Special Characters
  2943. File: as,  Node: M68K-Branch,  Next: M68K-Chars,  Up: M68K-opcodes
  2944. Branch Improvement
  2945. ..................
  2946.    Certain pseudo opcodes are permitted for branch instructions.  They
  2947. expand to the shortest branch instruction that will reach the target.
  2948. Generally these mnemonics are made by substituting `j' for `b' at the
  2949. start of a Motorola mnemonic.
  2950.    The following table summarizes the pseudo-operations.  A `*' flags
  2951. cases that are more fully described after the table:
  2952.                Displacement
  2953.                +-------------------------------------------------
  2954.                |                68020   68000/10
  2955.      Pseudo-Op |BYTE    WORD    LONG    LONG      non-PC relative
  2956.                +-------------------------------------------------
  2957.           jbsr |bsrs    bsr     bsrl    jsr       jsr
  2958.            jra |bras    bra     bral    jmp       jmp
  2959.      *     jXX |bXXs    bXX     bXXl    bNXs;jmpl bNXs;jmp
  2960.      *    dbXX |dbXX    dbXX        dbXX; bra; jmpl
  2961.      *    fjXX |fbXXw   fbXXw   fbXXl             fbNXw;jmp
  2962.      
  2963.      XX: condition
  2964.      NX: negative of condition XX
  2965.                     `*'--see full description below
  2966. `jbsr'
  2967. `jra'
  2968.      These are the simplest jump pseudo-operations; they always map to
  2969.      one particular machine instruction, depending on the displacement
  2970.      to the branch target.
  2971. `jXX'
  2972.      Here, `jXX' stands for an entire family of pseudo-operations,
  2973.      where XX is a conditional branch or condition-code test.  The full
  2974.      list of pseudo-ops in this family is:
  2975.            jhi   jls   jcc   jcs   jne   jeq   jvc
  2976.            jvs   jpl   jmi   jge   jlt   jgt   jle
  2977.      For the cases of non-PC relative displacements and long
  2978.      displacements on the 68000 or 68010, `as' will issue a longer code
  2979.      fragment in terms of NX, the opposite condition to XX.  For
  2980.      example, for the non-PC relative case:
  2981.               jXX foo
  2982.      gives
  2983.                bNXs oof
  2984.                jmp foo
  2985.            oof:
  2986. `dbXX'
  2987.      The full family of pseudo-operations covered here is
  2988.            dbhi   dbls   dbcc   dbcs   dbne   dbeq   dbvc
  2989.            dbvs   dbpl   dbmi   dbge   dblt   dbgt   dble
  2990.            dbf    dbra   dbt
  2991.      Other than for word and byte displacements, when the source reads
  2992.      `dbXX foo', `as' will emit
  2993.                dbXX oo1
  2994.                bra oo2
  2995.            oo1:jmpl foo
  2996.            oo2:
  2997. `fjXX'
  2998.      This family includes
  2999.            fjne   fjeq   fjge   fjlt   fjgt   fjle   fjf
  3000.            fjt    fjgl   fjgle  fjnge  fjngl  fjngle fjngt
  3001.            fjnle  fjnlt  fjoge  fjogl  fjogt  fjole  fjolt
  3002.            fjor   fjseq  fjsf   fjsne  fjst   fjueq  fjuge
  3003.            fjugt  fjule  fjult  fjun
  3004.      For branch targets that are not PC relative, `as' emits
  3005.                fbNX oof
  3006.                jmp foo
  3007.            oof:
  3008.      when it encounters `fjXX foo'.
  3009. File: as,  Node: M68K-Chars,  Prev: M68K-Branch,  Up: M68K-opcodes
  3010. Special Characters
  3011. ..................
  3012.    The immediate character is `#' for Sun compatibility.  The
  3013. line-comment character is `|'.  If a `#' appears at the beginning of a
  3014. line, it is treated as a comment unless it looks like `# line file', in
  3015. which case it is treated normally.
  3016. File: as,  Node: Sparc-Dependent,  Next: Z8000-Dependent,  Prev: M68K-Dependent,  Up: Machine Dependencies
  3017. SPARC Dependent Features
  3018. ========================
  3019. * Menu:
  3020. * Sparc-Opts::                  Options
  3021. * Sparc-Float::                 Floating Point
  3022. * Sparc-Directives::            Sparc Machine Directives
  3023. File: as,  Node: Sparc-Opts,  Next: Sparc-Float,  Up: Sparc-Dependent
  3024. Options
  3025. -------
  3026.    The SPARC chip family includes several successive levels (or other
  3027. variants) of chip, using the same core instruction set, but including a
  3028. few additional instructions at each level.
  3029.    By default, `as' assumes the core instruction set (SPARC v6), but
  3030. "bumps" the architecture level as needed: it switches to successively
  3031. higher architectures as it encounters instructions that only exist in
  3032. the higher levels.
  3033. `-Av6 | -Av7 | -Av8 | -Asparclite'
  3034.      Use one of the `-A' options to select one of the SPARC
  3035.      architectures explicitly.  If you select an architecture
  3036.      explicitly, `as' reports a fatal error if it encounters an
  3037.      instruction or feature requiring a higher level.
  3038. `-bump'
  3039.      Permit the assembler to "bump" the architecture level as required,
  3040.      but warn whenever it is necessary to switch to another level.
  3041. File: as,  Node: Sparc-Float,  Next: Sparc-Directives,  Prev: Sparc-Opts,  Up: Sparc-Dependent
  3042. Floating Point
  3043. --------------
  3044.    The Sparc uses IEEE floating-point numbers.
  3045. File: as,  Node: Sparc-Directives,  Prev: Sparc-Float,  Up: Sparc-Dependent
  3046. Sparc Machine Directives
  3047. ------------------------
  3048.    The Sparc version of `as' supports the following additional machine
  3049. directives:
  3050. `.common'
  3051.      This must be followed by a symbol name, a positive number, and
  3052.      `"bss"'.  This behaves somewhat like `.comm', but the syntax is
  3053.      different.
  3054. `.half'
  3055.      This is functionally identical to `.short'.
  3056. `.proc'
  3057.      This directive is ignored.  Any text following it on the same line
  3058.      is also ignored.
  3059. `.reserve'
  3060.      This must be followed by a symbol name, a positive number, and
  3061.      `"bss"'.  This behaves somewhat like `.lcomm', but the syntax is
  3062.      different.
  3063. `.seg'
  3064.      This must be followed by `"text"', `"data"', or `"data1"'.  It
  3065.      behaves like `.text', `.data', or `.data 1'.
  3066. `.skip'
  3067.      This is functionally identical to the `.space' directive.
  3068. `.word'
  3069.      On the Sparc, the .word directive produces 32 bit values, instead
  3070.      of the 16 bit values it produces on many other machines.
  3071. File: as,  Node: i386-Dependent,  Prev: Z8000-Dependent,  Up: Machine Dependencies
  3072. 80386 Dependent Features
  3073. ========================
  3074. * Menu:
  3075. * i386-Options::                Options
  3076. * i386-Syntax::                 AT&T Syntax versus Intel Syntax
  3077. * i386-Opcodes::                Opcode Naming
  3078. * i386-Regs::                   Register Naming
  3079. * i386-prefixes::               Opcode Prefixes
  3080. * i386-Memory::                 Memory References
  3081. * i386-jumps::                  Handling of Jump Instructions
  3082. * i386-Float::                  Floating Point
  3083. * i386-Notes::                  Notes
  3084. File: as,  Node: i386-Options,  Next: i386-Syntax,  Up: i386-Dependent
  3085. Options
  3086. -------
  3087.    The 80386 has no machine dependent options.
  3088. File: as,  Node: i386-Syntax,  Next: i386-Opcodes,  Prev: i386-Options,  Up: i386-Dependent
  3089. AT&T Syntax versus Intel Syntax
  3090. -------------------------------
  3091.    In order to maintain compatibility with the output of `gcc', `as'
  3092. supports AT&T System V/386 assembler syntax.  This is quite different
  3093. from Intel syntax.  We mention these differences because almost all
  3094. 80386 documents used only Intel syntax.  Notable differences between
  3095. the two syntaxes are:
  3096.    * AT&T immediate operands are preceded by `$'; Intel immediate
  3097.      operands are undelimited (Intel `push 4' is AT&T `pushl $4').
  3098.      AT&T register operands are preceded by `%'; Intel register operands
  3099.      are undelimited.  AT&T absolute (as opposed to PC relative)
  3100.      jump/call operands are prefixed by `*'; they are undelimited in
  3101.      Intel syntax.
  3102.    * AT&T and Intel syntax use the opposite order for source and
  3103.      destination operands.  Intel `add eax, 4' is `addl $4, %eax'.  The
  3104.      `source, dest' convention is maintained for compatibility with
  3105.      previous Unix assemblers.
  3106.    * In AT&T syntax the size of memory operands is determined from the
  3107.      last character of the opcode name.  Opcode suffixes of `b', `w',
  3108.      and `l' specify byte (8-bit), word (16-bit), and long (32-bit)
  3109.      memory references.  Intel syntax accomplishes this by prefixes
  3110.      memory operands (*not* the opcodes themselves) with `byte ptr',
  3111.      `word ptr', and `dword ptr'.  Thus, Intel `mov al, byte ptr FOO'
  3112.      is `movb FOO, %al' in AT&T syntax.
  3113.    * Immediate form long jumps and calls are `lcall/ljmp $SECTION,
  3114.      $OFFSET' in AT&T syntax; the Intel syntax is `call/jmp far
  3115.      SECTION:OFFSET'.  Also, the far return instruction is `lret
  3116.      $STACK-ADJUST' in AT&T syntax; Intel syntax is `ret far
  3117.      STACK-ADJUST'.
  3118.    * The AT&T assembler does not provide support for multiple section
  3119.      programs.  Unix style systems expect all programs to be single
  3120.      sections.
  3121. File: as,  Node: i386-Opcodes,  Next: i386-Regs,  Prev: i386-Syntax,  Up: i386-Dependent
  3122. Opcode Naming
  3123. -------------
  3124.    Opcode names are suffixed with one character modifiers which specify
  3125. the size of operands.  The letters `b', `w', and `l' specify byte,
  3126. word, and long operands.  If no suffix is specified by an instruction
  3127. and it contains no memory operands then `as' tries to fill in the
  3128. missing suffix based on the destination register operand (the last one
  3129. by convention).  Thus, `mov %ax, %bx' is equivalent to `movw %ax, %bx';
  3130. also, `mov $1, %bx' is equivalent to `movw $1, %bx'.  Note that this is
  3131. incompatible with the AT&T Unix assembler which assumes that a missing
  3132. opcode suffix implies long operand size.  (This incompatibility does
  3133. not affect compiler output since compilers always explicitly specify
  3134. the opcode suffix.)
  3135.    Almost all opcodes have the same names in AT&T and Intel format.
  3136. There are a few exceptions.  The sign extend and zero extend
  3137. instructions need two sizes to specify them.  They need a size to
  3138. sign/zero extend *from* and a size to zero extend *to*.  This is
  3139. accomplished by using two opcode suffixes in AT&T syntax.  Base names
  3140. for sign extend and zero extend are `movs...' and `movz...' in AT&T
  3141. syntax (`movsx' and `movzx' in Intel syntax).  The opcode suffixes are
  3142. tacked on to this base name, the *from* suffix before the *to* suffix.
  3143. Thus, `movsbl %al, %edx' is AT&T syntax for "move sign extend *from*
  3144. %al *to* %edx."  Possible suffixes, thus, are `bl' (from byte to long),
  3145. `bw' (from byte to word), and `wl' (from word to long).
  3146.    The Intel-syntax conversion instructions
  3147.    * `cbw' -- sign-extend byte in `%al' to word in `%ax',
  3148.    * `cwde' -- sign-extend word in `%ax' to long in `%eax',
  3149.    * `cwd' -- sign-extend word in `%ax' to long in `%dx:%ax',
  3150.    * `cdq' -- sign-extend dword in `%eax' to quad in `%edx:%eax',
  3151. are called `cbtw', `cwtl', `cwtd', and `cltd' in AT&T naming.  `as'
  3152. accepts either naming for these instructions.
  3153.    Far call/jump instructions are `lcall' and `ljmp' in AT&T syntax,
  3154. but are `call far' and `jump far' in Intel convention.
  3155. File: as,  Node: i386-Regs,  Next: i386-prefixes,  Prev: i386-Opcodes,  Up: i386-Dependent
  3156. Register Naming
  3157. ---------------
  3158.    Register operands are always prefixes with `%'.  The 80386 registers
  3159. consist of
  3160.    * the 8 32-bit registers `%eax' (the accumulator), `%ebx', `%ecx',
  3161.      `%edx', `%edi', `%esi', `%ebp' (the frame pointer), and `%esp'
  3162.      (the stack pointer).
  3163.    * the 8 16-bit low-ends of these: `%ax', `%bx', `%cx', `%dx', `%di',
  3164.      `%si', `%bp', and `%sp'.
  3165.    * the 8 8-bit registers: `%ah', `%al', `%bh', `%bl', `%ch', `%cl',
  3166.      `%dh', and `%dl' (These are the high-bytes and low-bytes of `%ax',
  3167.      `%bx', `%cx', and `%dx')
  3168.    * the 6 section registers `%cs' (code section), `%ds' (data
  3169.      section), `%ss' (stack section), `%es', `%fs', and `%gs'.
  3170.    * the 3 processor control registers `%cr0', `%cr2', and `%cr3'.
  3171.    * the 6 debug registers `%db0', `%db1', `%db2', `%db3', `%db6', and
  3172.      `%db7'.
  3173.    * the 2 test registers `%tr6' and `%tr7'.
  3174.    * the 8 floating point register stack `%st' or equivalently
  3175.      `%st(0)', `%st(1)', `%st(2)', `%st(3)', `%st(4)', `%st(5)',
  3176.      `%st(6)', and `%st(7)'.
  3177. File: as,  Node: i386-prefixes,  Next: i386-Memory,  Prev: i386-Regs,  Up: i386-Dependent
  3178. Opcode Prefixes
  3179. ---------------
  3180.    Opcode prefixes are used to modify the following opcode.  They are
  3181. used to repeat string instructions, to provide section overrides, to
  3182. perform bus lock operations, and to give operand and address size
  3183. (16-bit operands are specified in an instruction by prefixing what would
  3184. normally be 32-bit operands with a "operand size" opcode prefix).
  3185. Opcode prefixes are usually given as single-line instructions with no
  3186. operands, and must directly precede the instruction they act upon.  For
  3187. example, the `scas' (scan string) instruction is repeated with:
  3188.              repne
  3189.              scas
  3190.    Here is a list of opcode prefixes:
  3191.    * Section override prefixes `cs', `ds', `ss', `es', `fs', `gs'.
  3192.      These are automatically added by specifying using the
  3193.      SECTION:MEMORY-OPERAND form for memory references.
  3194.    * Operand/Address size prefixes `data16' and `addr16' change 32-bit
  3195.      operands/addresses into 16-bit operands/addresses.  Note that
  3196.      16-bit addressing modes (i.e. 8086 and 80286 addressing modes) are
  3197.      not supported (yet).
  3198.    * The bus lock prefix `lock' inhibits interrupts during execution of
  3199.      the instruction it precedes.  (This is only valid with certain
  3200.      instructions; see a 80386 manual for details).
  3201.    * The wait for coprocessor prefix `wait' waits for the coprocessor
  3202.      to complete the current instruction.  This should never be needed
  3203.      for the 80386/80387 combination.
  3204.    * The `rep', `repe', and `repne' prefixes are added to string
  3205.      instructions to make them repeat `%ecx' times.
  3206. File: as,  Node: i386-Memory,  Next: i386-jumps,  Prev: i386-prefixes,  Up: i386-Dependent
  3207. Memory References
  3208. -----------------
  3209.    An Intel syntax indirect memory reference of the form
  3210.      SECTION:[BASE + INDEX*SCALE + DISP]
  3211. is translated into the AT&T syntax
  3212.      SECTION:DISP(BASE, INDEX, SCALE)
  3213. where BASE and INDEX are the optional 32-bit base and index registers,
  3214. DISP is the optional displacement, and SCALE, taking the values 1, 2,
  3215. 4, and 8, multiplies INDEX to calculate the address of the operand.  If
  3216. no SCALE is specified, SCALE is taken to be 1.  SECTION specifies the
  3217. optional section register for the memory operand, and may override the
  3218. default section register (see a 80386 manual for section register
  3219. defaults). Note that section overrides in AT&T syntax *must* have be
  3220. preceded by a `%'.  If you specify a section override which coincides
  3221. with the default section register, `as' will *not* output any section
  3222. register override prefixes to assemble the given instruction.  Thus,
  3223. section overrides can be specified to emphasize which section register
  3224. is used for a given memory operand.
  3225.    Here are some examples of Intel and AT&T style memory references:
  3226. AT&T: `-4(%ebp)', Intel:  `[ebp - 4]'
  3227.      BASE is `%ebp'; DISP is `-4'. SECTION is missing, and the default
  3228.      section is used (`%ss' for addressing with `%ebp' as the base
  3229.      register).  INDEX, SCALE are both missing.
  3230. AT&T: `foo(,%eax,4)', Intel: `[foo + eax*4]'
  3231.      INDEX is `%eax' (scaled by a SCALE 4); DISP is `foo'.  All other
  3232.      fields are missing.  The section register here defaults to `%ds'.
  3233. AT&T: `foo(,1)'; Intel `[foo]'
  3234.      This uses the value pointed to by `foo' as a memory operand.  Note
  3235.      that BASE and INDEX are both missing, but there is only *one* `,'.
  3236.      This is a syntactic exception.
  3237. AT&T: `%gs:foo'; Intel `gs:foo'
  3238.      This selects the contents of the variable `foo' with section
  3239.      register SECTION being `%gs'.
  3240.    Absolute (as opposed to PC relative) call and jump operands must be
  3241. prefixed with `*'.  If no `*' is specified, `as' will always choose PC
  3242. relative addressing for jump/call labels.
  3243.    Any instruction that has a memory operand *must* specify its size
  3244. (byte, word, or long) with an opcode suffix (`b', `w', or `l',
  3245. respectively).
  3246. File: as,  Node: i386-jumps,  Next: i386-Float,  Prev: i386-Memory,  Up: i386-Dependent
  3247. Handling of Jump Instructions
  3248. -----------------------------
  3249.    Jump instructions are always optimized to use the smallest possible
  3250. displacements.  This is accomplished by using byte (8-bit) displacement
  3251. jumps whenever the target is sufficiently close.  If a byte displacement
  3252. is insufficient a long (32-bit) displacement is used.  We do not support
  3253. word (16-bit) displacement jumps (i.e. prefixing the jump instruction
  3254. with the `addr16' opcode prefix), since the 80386 insists upon masking
  3255. `%eip' to 16 bits after the word displacement is added.
  3256.    Note that the `jcxz', `jecxz', `loop', `loopz', `loope', `loopnz'
  3257. and `loopne' instructions only come in byte displacements, so that it
  3258. is possible that use of these instructions (`gcc' does not use them)
  3259. will cause the assembler to print an error message (and generate
  3260. incorrect code).  The AT&T 80386 assembler tries to get around this
  3261. problem by expanding `jcxz foo' to
  3262.               jcxz cx_zero
  3263.               jmp cx_nonzero
  3264.      cx_zero: jmp foo
  3265.      cx_nonzero:
  3266. File: as,  Node: i386-Float,  Next: i386-Notes,  Prev: i386-jumps,  Up: i386-Dependent
  3267. Floating Point
  3268. --------------
  3269.    All 80387 floating point types except packed BCD are supported.
  3270. (BCD support may be added without much difficulty).  These data types
  3271. are 16-, 32-, and 64- bit integers, and single (32-bit), double
  3272. (64-bit), and extended (80-bit) precision floating point.  Each
  3273. supported type has an opcode suffix and a constructor associated with
  3274. it.  Opcode suffixes specify operand's data types.  Constructors build
  3275. these data types into memory.
  3276.    * Floating point constructors are `.float' or `.single', `.double',
  3277.      and `.tfloat' for 32-, 64-, and 80-bit formats.  These correspond
  3278.      to opcode suffixes `s', `l', and `t'.  `t' stands for temporary
  3279.      real, and that the 80387 only supports this format via the `fldt'
  3280.      (load temporary real to stack top) and `fstpt' (store temporary
  3281.      real and pop stack) instructions.
  3282.    * Integer constructors are `.word', `.long' or `.int', and `.quad'
  3283.      for the 16-, 32-, and 64-bit integer formats.  The corresponding
  3284.      opcode suffixes are `s' (single), `l' (long), and `q' (quad).  As
  3285.      with the temporary real format the 64-bit `q' format is only
  3286.      present in the `fildq' (load quad integer to stack top) and
  3287.      `fistpq' (store quad integer and pop stack) instructions.
  3288.    Register to register operations do not require opcode suffixes, so
  3289. that `fst %st, %st(1)' is equivalent to `fstl %st, %st(1)'.
  3290.    Since the 80387 automatically synchronizes with the 80386 `fwait'
  3291. instructions are almost never needed (this is not the case for the
  3292. 80286/80287 and 8086/8087 combinations).  Therefore, `as' suppresses
  3293. the `fwait' instruction whenever it is implicitly selected by one of
  3294. the `fn...' instructions.  For example, `fsave' and `fnsave' are
  3295. treated identically.  In general, all the `fn...' instructions are made
  3296. equivalent to `f...' instructions.  If `fwait' is desired it must be
  3297. explicitly coded.
  3298. File: as,  Node: i386-Notes,  Prev: i386-Float,  Up: i386-Dependent
  3299. Notes
  3300. -----
  3301.    There is some trickery concerning the `mul' and `imul' instructions
  3302. that deserves mention.  The 16-, 32-, and 64-bit expanding multiplies
  3303. (base opcode `0xf6'; extension 4 for `mul' and 5 for `imul') can be
  3304. output only in the one operand form.  Thus, `imul %ebx, %eax' does
  3305. *not* select the expanding multiply; the expanding multiply would
  3306. clobber the `%edx' register, and this would confuse `gcc' output.  Use
  3307. `imul %ebx' to get the 64-bit product in `%edx:%eax'.
  3308.    We have added a two operand form of `imul' when the first operand is
  3309. an immediate mode expression and the second operand is a register.
  3310. This is just a shorthand, so that, multiplying `%eax' by 69, for
  3311. example, can be done with `imul $69, %eax' rather than `imul $69, %eax,
  3312. %eax'.
  3313. File: as,  Node: Z8000-Dependent,  Next: i386-Dependent,  Prev: Sparc-Dependent,  Up: Machine Dependencies
  3314. Z8000 Dependent Features
  3315. ========================
  3316.    The Z8000 as supports both members of the Z8000 family: the
  3317. unsegmented Z8002, with 16 bit addresses, and the segmented Z8001 with
  3318. 24 bit addresses.
  3319.    When the assembler is in unsegmented mode (specified with the
  3320. `unsegm' directive), an address will take up one word (16 bit) sized
  3321. register.  When the assembler is in segmented mode (specified with the
  3322. `segm' directive), a 24-bit address takes up a long (32 bit) register.
  3323. *Note Assembler Directives for the Z8000: Z8000 Directives, for a list
  3324. of other Z8000 specific assembler directives.
  3325. * Menu:
  3326. * Z8000 Options::               No special command-line options for Z8000
  3327. * Z8000 Syntax::                Assembler syntax for the Z8000
  3328. * Z8000 Directives::            Special directives for the Z8000
  3329. * Z8000 Opcodes::               Opcodes
  3330. File: as,  Node: Z8000 Options,  Next: Z8000 Syntax,  Up: Z8000-Dependent
  3331. Options
  3332. -------
  3333.    `as' has no additional command-line options for the Zilog Z8000
  3334. family.
  3335. File: as,  Node: Z8000 Syntax,  Next: Z8000 Directives,  Prev: Z8000 Options,  Up: Z8000-Dependent
  3336. Syntax
  3337. ------
  3338. * Menu:
  3339. * Z8000-Chars::                Special Characters
  3340. * Z8000-Regs::                 Register Names
  3341. * Z8000-Addressing::           Addressing Modes
  3342. File: as,  Node: Z8000-Chars,  Next: Z8000-Regs,  Up: Z8000 Syntax
  3343. Special Characters
  3344. ..................
  3345.    `!' is the line comment character.
  3346.    You can use `;' instead of a newline to separate statements.
  3347. File: as,  Node: Z8000-Regs,  Next: Z8000-Addressing,  Prev: Z8000-Chars,  Up: Z8000 Syntax
  3348. Register Names
  3349. ..............
  3350.    The Z8000 has sixteen 16 bit registers, numbered 0 to 15.  You can
  3351. refer to different sized groups of registers by register number, with
  3352. the prefix `r' for 16 bit registers, `rr' for 32 bit registers and `rq'
  3353. for 64 bit registers.  You can also refer to the contents of the first
  3354. eight (of the sixteen 16 bit registers) by bytes.  They are named `rNh'
  3355. and `rNl'.
  3356. *byte registers*
  3357.      r0l r0h r1h r1l r2h r2l r3h r3l
  3358.      r4h r4l r5h r5l r6h r6l r7h r7l
  3359. *word registers*
  3360.      r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15
  3361. *long word registers*
  3362.      rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14
  3363. *quad word registers*
  3364.      rq0 rq4 rq8 rq12
  3365. File: as,  Node: Z8000-Addressing,  Prev: Z8000-Regs,  Up: Z8000 Syntax
  3366. Addressing Modes
  3367. ................
  3368.    as understands the following addressing modes for the Z8000:
  3369.      Register direct
  3370. `@rN'
  3371.      Indirect register
  3372. `ADDR'
  3373.      Direct: the 16 bit or 24 bit address (depending on whether the
  3374.      assembler is in segmented or unsegmented mode) of the operand is
  3375.      in the instruction.
  3376. `address(rN)'
  3377.      Indexed: the 16 or 24 bit address is added to the 16 bit register
  3378.      to produce the final address in memory of the operand.
  3379. `rN(#IMM)'
  3380.      Base Address: the 16 or 24 bit register is added to the 16 bit sign
  3381.      extended immediate displacement to produce the final address in
  3382.      memory of the operand.
  3383. `rN(rM)'
  3384.      Base Index: the 16 or 24 bit register rN is added to the sign
  3385.      extended 16 bit index register rM to produce the final address in
  3386.      memory of the operand.
  3387. `#XX'
  3388.      Immediate data XX.
  3389. File: as,  Node: Z8000 Directives,  Next: Z8000 Opcodes,  Prev: Z8000 Syntax,  Up: Z8000-Dependent
  3390. Assembler Directives for the Z8000
  3391. ----------------------------------
  3392.    The Z8000 port of as includes these additional assembler directives,
  3393. for compatibility with other Z8000 assemblers.  As shown, these do not
  3394. begin with `.' (unlike the ordinary as directives).
  3395. `segm'
  3396.      Generates code for the segmented Z8001.
  3397. `unsegm'
  3398.      Generates code for the unsegmented Z8002.
  3399. `name'
  3400.      Synonym for `.file'
  3401. `global'
  3402.      Synonum for `.global'
  3403. `wval'
  3404.      Synonym for `.word'
  3405. `lval'
  3406.      Synonym for `.long'
  3407. `bval'
  3408.      Synonym for `.byte'
  3409. `sval'
  3410.      Assemble a string.  `sval' expects one string literal, delimited by
  3411.      single quotes.  It assembles each byte of the string into
  3412.      consecutive addresses.  You can use the escape sequence `%XX'
  3413.      (where XX represents a two-digit hexadecimal number) to represent
  3414.      the character whose ASCII value is XX.  Use this feature to
  3415.      describe single quote and other characters that may not appear in
  3416.      string literals as themselves.  For example, the C statement
  3417.      `char *a = "he said \"it's 50% off\"";' is represented in Z8000
  3418.      assembly language (shown with the assembler output in hex at the
  3419.      left) as
  3420.           68652073    sval    'he said %22it%27s 50%25 off%22%00'
  3421.           61696420
  3422.           22697427
  3423.           73203530
  3424.           25206F66
  3425.           662200
  3426. `rsect'
  3427.      synonym for `.section'
  3428. `block'
  3429.      synonym for `.space'
  3430. `even'
  3431.      synonym for `.align 1'
  3432. File: as,  Node: Z8000 Opcodes,  Prev: Z8000 Directives,  Up: Z8000-Dependent
  3433. Opcodes
  3434. -------
  3435.    For detailed information on the Z8000 machine instruction set, see
  3436. `Z8000 Technical Manual'.
  3437.    The following table summarizes the opcodes and their arguments:
  3438.                  rs   16 bit source register
  3439.                  rd   16 bit destination register
  3440.                  rbs   8 bit source register
  3441.                  rbd   8 bit destination register
  3442.                  rrs   32 bit source register
  3443.                  rrd   32 bit destination register
  3444.                  rqs   64 bit source register
  3445.                  rqd   64 bit destination register
  3446.                  addr 16/24 bit address
  3447.                  imm  immediate data
  3448.      
  3449.      adc rd,rs               clrb addr               cpsir @rd,@rs,rr,cc
  3450.      adcb rbd,rbs            clrb addr(rd)           cpsirb @rd,@rs,rr,cc
  3451.      add rd,@rs              clrb rbd                dab rbd
  3452.      add rd,addr             com @rd                 dbjnz rbd,disp7
  3453.      add rd,addr(rs)         com addr                dec @rd,imm4m1
  3454.      add rd,imm16            com addr(rd)            dec addr(rd),imm4m1
  3455.      add rd,rs               com rd                  dec addr,imm4m1
  3456.      addb rbd,@rs            comb @rd                dec rd,imm4m1
  3457.      addb rbd,addr           comb addr               decb @rd,imm4m1
  3458.      addb rbd,addr(rs)       comb addr(rd)           decb addr(rd),imm4m1
  3459.      addb rbd,imm8           comb rbd                decb addr,imm4m1
  3460.      addb rbd,rbs            comflg flags            decb rbd,imm4m1
  3461.      addl rrd,@rs            cp @rd,imm16            di i2
  3462.      addl rrd,addr           cp addr(rd),imm16       div rrd,@rs
  3463.      addl rrd,addr(rs)       cp addr,imm16           div rrd,addr
  3464.      addl rrd,imm32          cp rd,@rs               div rrd,addr(rs)
  3465.      addl rrd,rrs            cp rd,addr              div rrd,imm16
  3466.      and rd,@rs              cp rd,addr(rs)          div rrd,rs
  3467.      and rd,addr             cp rd,imm16             divl rqd,@rs
  3468.      and rd,addr(rs)         cp rd,rs                divl rqd,addr
  3469.      and rd,imm16            cpb @rd,imm8            divl rqd,addr(rs)
  3470.      and rd,rs               cpb addr(rd),imm8       divl rqd,imm32
  3471.      andb rbd,@rs            cpb addr,imm8           divl rqd,rrs
  3472.      andb rbd,addr           cpb rbd,@rs             djnz rd,disp7
  3473.      andb rbd,addr(rs)       cpb rbd,addr            ei i2
  3474.      andb rbd,imm8           cpb rbd,addr(rs)        ex rd,@rs
  3475.      andb rbd,rbs            cpb rbd,imm8            ex rd,addr
  3476.      bit @rd,imm4            cpb rbd,rbs             ex rd,addr(rs)
  3477.      bit addr(rd),imm4       cpd rd,@rs,rr,cc        ex rd,rs
  3478.      bit addr,imm4           cpdb rbd,@rs,rr,cc      exb rbd,@rs
  3479.      bit rd,imm4             cpdr rd,@rs,rr,cc       exb rbd,addr
  3480.      bit rd,rs               cpdrb rbd,@rs,rr,cc     exb rbd,addr(rs)
  3481.      bitb @rd,imm4           cpi rd,@rs,rr,cc        exb rbd,rbs
  3482.      bitb addr(rd),imm4      cpib rbd,@rs,rr,cc      ext0e imm8
  3483.      bitb addr,imm4          cpir rd,@rs,rr,cc       ext0f imm8
  3484.      bitb rbd,imm4           cpirb rbd,@rs,rr,cc     ext8e imm8
  3485.      bitb rbd,rs             cpl rrd,@rs             ext8f imm8
  3486.      bpt                     cpl rrd,addr            exts rrd
  3487.      call @rd                cpl rrd,addr(rs)        extsb rd
  3488.      call addr               cpl rrd,imm32           extsl rqd
  3489.      call addr(rd)           cpl rrd,rrs             halt
  3490.      calr disp12             cpsd @rd,@rs,rr,cc      in rd,@rs
  3491.      clr @rd                 cpsdb @rd,@rs,rr,cc     in rd,imm16
  3492.      clr addr                cpsdr @rd,@rs,rr,cc     inb rbd,@rs
  3493.      clr addr(rd)            cpsdrb @rd,@rs,rr,cc    inb rbd,imm16
  3494.      clr rd                  cpsi @rd,@rs,rr,cc      inc @rd,imm4m1
  3495.      clrb @rd                cpsib @rd,@rs,rr,cc     inc addr(rd),imm4m1
  3496.      inc addr,imm4m1         ldb rbd,rs(rx)          mult rrd,addr(rs)
  3497.      inc rd,imm4m1           ldb rd(imm16),rbs       mult rrd,imm16
  3498.      incb @rd,imm4m1         ldb rd(rx),rbs          mult rrd,rs
  3499.      incb addr(rd),imm4m1    ldctl ctrl,rs           multl rqd,@rs
  3500.      incb addr,imm4m1        ldctl rd,ctrl           multl rqd,addr
  3501.      incb rbd,imm4m1         ldd @rs,@rd,rr          multl rqd,addr(rs)
  3502.      ind @rd,@rs,ra          lddb @rs,@rd,rr         multl rqd,imm32
  3503.      indb @rd,@rs,rba        lddr @rs,@rd,rr         multl rqd,rrs
  3504.      inib @rd,@rs,ra         lddrb @rs,@rd,rr        neg @rd
  3505.      inibr @rd,@rs,ra        ldi @rd,@rs,rr          neg addr
  3506.      iret                    ldib @rd,@rs,rr         neg addr(rd)
  3507.      jp cc,@rd               ldir @rd,@rs,rr         neg rd
  3508.      jp cc,addr              ldirb @rd,@rs,rr        negb @rd
  3509.      jp cc,addr(rd)          ldk rd,imm4             negb addr
  3510.      jr cc,disp8             ldl @rd,rrs             negb addr(rd)
  3511.      ld @rd,imm16            ldl addr(rd),rrs        negb rbd
  3512.      ld @rd,rs               ldl addr,rrs            nop
  3513.      ld addr(rd),imm16       ldl rd(imm16),rrs       or rd,@rs
  3514.      ld addr(rd),rs          ldl rd(rx),rrs          or rd,addr
  3515.      ld addr,imm16           ldl rrd,@rs             or rd,addr(rs)
  3516.      ld addr,rs              ldl rrd,addr            or rd,imm16
  3517.      ld rd(imm16),rs         ldl rrd,addr(rs)        or rd,rs
  3518.      ld rd(rx),rs            ldl rrd,imm32           orb rbd,@rs
  3519.      ld rd,@rs               ldl rrd,rrs             orb rbd,addr
  3520.      ld rd,addr              ldl rrd,rs(imm16)       orb rbd,addr(rs)
  3521.      ld rd,addr(rs)          ldl rrd,rs(rx)          orb rbd,imm8
  3522.      ld rd,imm16             ldm @rd,rs,n            orb rbd,rbs
  3523.      ld rd,rs                ldm addr(rd),rs,n       out @rd,rs
  3524.      ld rd,rs(imm16)         ldm addr,rs,n           out imm16,rs
  3525.      ld rd,rs(rx)            ldm rd,@rs,n            outb @rd,rbs
  3526.      lda rd,addr             ldm rd,addr(rs),n       outb imm16,rbs
  3527.      lda rd,addr(rs)         ldm rd,addr,n           outd @rd,@rs,ra
  3528.      lda rd,rs(imm16)        ldps @rs                outdb @rd,@rs,rba
  3529.      lda rd,rs(rx)           ldps addr               outib @rd,@rs,ra
  3530.      ldar rd,disp16          ldps addr(rs)           outibr @rd,@rs,ra
  3531.      ldb @rd,imm8            ldr disp16,rs           pop @rd,@rs
  3532.      ldb @rd,rbs             ldr rd,disp16           pop addr(rd),@rs
  3533.      ldb addr(rd),imm8       ldrb disp16,rbs         pop addr,@rs
  3534.      ldb addr(rd),rbs        ldrb rbd,disp16         pop rd,@rs
  3535.      ldb addr,imm8           ldrl disp16,rrs         popl @rd,@rs
  3536.      ldb addr,rbs            ldrl rrd,disp16         popl addr(rd),@rs
  3537.      ldb rbd,@rs             mbit                    popl addr,@rs
  3538.      ldb rbd,addr            mreq rd                 popl rrd,@rs
  3539.      ldb rbd,addr(rs)        mres                    push @rd,@rs
  3540.      ldb rbd,imm8            mset                    push @rd,addr
  3541.      ldb rbd,rbs             mult rrd,@rs            push @rd,addr(rs)
  3542.      ldb rbd,rs(imm16)       mult rrd,addr           push @rd,imm16
  3543.      push @rd,rs             set addr,imm4           subl rrd,imm32
  3544.      pushl @rd,@rs           set rd,imm4             subl rrd,rrs
  3545.      pushl @rd,addr          set rd,rs               tcc cc,rd
  3546.      pushl @rd,addr(rs)      setb @rd,imm4           tccb cc,rbd
  3547.      pushl @rd,rrs           setb addr(rd),imm4      test @rd
  3548.      res @rd,imm4            setb addr,imm4          test addr
  3549.      res addr(rd),imm4       setb rbd,imm4           test addr(rd)
  3550.      res addr,imm4           setb rbd,rs             test rd
  3551.      res rd,imm4             setflg imm4             testb @rd
  3552.      res rd,rs               sinb rbd,imm16          testb addr
  3553.      resb @rd,imm4           sinb rd,imm16           testb addr(rd)
  3554.      resb addr(rd),imm4      sind @rd,@rs,ra         testb rbd
  3555.      resb addr,imm4          sindb @rd,@rs,rba       testl @rd
  3556.      resb rbd,imm4           sinib @rd,@rs,ra        testl addr
  3557.      resb rbd,rs             sinibr @rd,@rs,ra       testl addr(rd)
  3558.      resflg imm4             sla rd,imm8             testl rrd
  3559.      ret cc                  slab rbd,imm8           trdb @rd,@rs,rba
  3560.      rl rd,imm1or2           slal rrd,imm8           trdrb @rd,@rs,rba
  3561.      rlb rbd,imm1or2         sll rd,imm8             trib @rd,@rs,rbr
  3562.      rlc rd,imm1or2          sllb rbd,imm8           trirb @rd,@rs,rbr
  3563.      rlcb rbd,imm1or2        slll rrd,imm8           trtdrb @ra,@rb,rbr
  3564.      rldb rbb,rba            sout imm16,rs           trtib @ra,@rb,rr
  3565.      rr rd,imm1or2           soutb imm16,rbs         trtirb @ra,@rb,rbr
  3566.      rrb rbd,imm1or2         soutd @rd,@rs,ra        trtrb @ra,@rb,rbr
  3567.      rrc rd,imm1or2          soutdb @rd,@rs,rba      tset @rd
  3568.      rrcb rbd,imm1or2        soutib @rd,@rs,ra       tset addr
  3569.      rrdb rbb,rba            soutibr @rd,@rs,ra      tset addr(rd)
  3570.      rsvd36                  sra rd,imm8             tset rd
  3571.      rsvd38                  srab rbd,imm8           tsetb @rd
  3572.      rsvd78                  sral rrd,imm8           tsetb addr
  3573.      rsvd7e                  srl rd,imm8             tsetb addr(rd)
  3574.      rsvd9d                  srlb rbd,imm8           tsetb rbd
  3575.      rsvd9f                  srll rrd,imm8           xor rd,@rs
  3576.      rsvdb9                  sub rd,@rs              xor rd,addr
  3577.      rsvdbf                  sub rd,addr             xor rd,addr(rs)
  3578.      sbc rd,rs               sub rd,addr(rs)         xor rd,imm16
  3579.      sbcb rbd,rbs            sub rd,imm16            xor rd,rs
  3580.      sc imm8                 sub rd,rs               xorb rbd,@rs
  3581.      sda rd,rs               subb rbd,@rs            xorb rbd,addr
  3582.      sdab rbd,rs             subb rbd,addr           xorb rbd,addr(rs)
  3583.      sdal rrd,rs             subb rbd,addr(rs)       xorb rbd,imm8
  3584.      sdl rd,rs               subb rbd,imm8           xorb rbd,rbs
  3585.      sdlb rbd,rs             subb rbd,rbs            xorb rbd,rbs
  3586.      sdll rrd,rs             subl rrd,@rs
  3587.      set @rd,imm4            subl rrd,addr
  3588.      set addr(rd),imm4       subl rrd,addr(rs)
  3589. File: as,  Node: Acknowledgements,  Next: Index,  Prev: Copying,  Up: Top
  3590. Acknowledgements
  3591. ****************
  3592.    If you've contributed to `as' and your name isn't listed here, it is
  3593. not meant as a slight.  We just don't know about it.  Send mail to the
  3594. maintainer, and we'll correct the situation.  Currently (June 1993), the
  3595. maintainer is Ken Raeburn (email address `raeburn@cygnus.com').
  3596.    Dean Elsner wrote the original GNU assembler for the VAX.(1)
  3597.    Jay Fenlason maintained GAS for a while, adding support for
  3598. gdb-specific debug information and the 68k series machines, most of the
  3599. preprocessing pass, and extensive changes in messages.c, input-file.c,
  3600. write.c.
  3601.    K. Richard Pixley maintained GAS for a while, adding various
  3602. enhancements and many bug fixes, including merging support for several
  3603. processors, breaking GAS up to handle multiple object file format
  3604. backends (including heavy rewrite, testing, an integration of the coff
  3605. and b.out backends), adding configuration including heavy testing and
  3606. verification of cross assemblers and file splits and renaming,
  3607. converted GAS to strictly ansi C including full prototypes, added
  3608. support for m680[34]0 & cpu32, considerable work on i960 including a
  3609. COFF port (including considerable amounts of reverse engineering), a
  3610. SPARC opcode file rewrite, DECstation, rs6000, and hp300hpux host
  3611. ports, updated "know" assertions and made them work, much other
  3612. reorganization, cleanup, and lint.
  3613.    Ken Raeburn wrote the high-level BFD interface code to replace most
  3614. of the code in format-specific I/O modules.
  3615.    The original VMS support was contributed by David L. Kashtan.  Eric
  3616. Youngdale has done much work with it since.
  3617.    The Intel 80386 machine description was written by Eliot Dresselhaus.
  3618.    Minh Tran-Le at IntelliCorp contributed some AIX 386 support.
  3619.    The Motorola 88k machine description was contributed by Devon Bowen
  3620. of Buffalo University and Torbjorn Granlund of the Swedish Institute of
  3621. Computer Science.
  3622.    Keith Knowles at the Open Software Foundation wrote the original
  3623. MIPS back end (tc-mips.c, tc-mips.h), and contributed Rose format
  3624. support (which hasn't been merged in yet).  Ralph Campbell worked with
  3625. the MIPS code to support a.out format.
  3626.    Support for the Zilog Z8k and Hitachi H8/300 and H8/500 processors
  3627. (tc-z8k, tc-h8300, tc-h8500), and IEEE 695 object file format
  3628. (obj-ieee), was written by Steve Chamberlain of Cygnus Support.  Steve
  3629. also modified the COFF back end to use BFD for some low-level
  3630. operations, for use with the H8/300 and AMD 29k targets.
  3631.    John Gilmore built the AMD 29000 support, added .include support, and
  3632. simplified the configuration of which versions accept which pseudo-ops.
  3633. He updated the 68k machine description so that Motorola's opcodes
  3634. always produced fixed-size instructions (e.g. jsr), while synthetic
  3635. instructions remained shrinkable (jbsr).  John fixed many bugs,
  3636. including true tested cross-compilation support, and one bug in
  3637. relaxation that took a week and required the apocryphal one-bit fix.
  3638.    Ian Lance Taylor of Cygnus Support merged the Motorola and MIT
  3639. syntaxes for the 68k, completed support for some COFF targets (68k,
  3640. i386 SVR3, and SCO Unix), and made a few other minor patches.
  3641.    Steve Chamberlain made `as' able to generate listings.
  3642.    Support for the HP9000/300 was contributed by Hewlett-Packard.
  3643.    Support for ELF format files has been worked on by Mark Eichin of
  3644. Cygnus Support (original, incomplete implementation for SPARC), Pete
  3645. Hoogenboom and Jeff Law at the University of Utah (HPPA mainly),
  3646. Michael Meissner of the Open Software Foundation (i386 mainly), and Ken
  3647. Raeburn of Cygnus Support (sparc, and some initial 64-bit support).
  3648.    Several engineers at Cygnus Support have also provided many small
  3649. bug fixes and configuration enhancements.
  3650.    Many others have contributed large or small bugfixes and
  3651. enhancements.  If you've contributed significant work and are not
  3652. mentioned on this list, and want to be, let us know.  Some of the
  3653. history has been lost; we aren't intentionally leaving anyone out.
  3654.    ---------- Footnotes ----------
  3655.    (1)  Any more details?
  3656. File: as,  Node: Copying,  Next: Acknowledgements,  Prev: Machine Dependencies,  Up: Top
  3657. GNU GENERAL PUBLIC LICENSE
  3658. **************************
  3659.                          Version 2, June 1991
  3660.      Copyright (C) 1989, 1991 Free Software Foundation, Inc.  675
  3661.      Mass Ave, Cambridge, MA 02139, USA
  3662.      
  3663.      Everyone is permitted to copy and distribute verbatim copies
  3664.      of this license document, but changing it is not allowed.
  3665. Preamble
  3666. ========
  3667.    The licenses for most software are designed to take away your
  3668. freedom to share and change it.  By contrast, the GNU General Public
  3669. License is intended to guarantee your freedom to share and change free
  3670. software--to make sure the software is free for all its users.  This
  3671. General Public License applies to most of the Free Software
  3672. Foundation's software and to any other program whose authors commit to
  3673. using it.  (Some other Free Software Foundation software is covered by
  3674. the GNU Library General Public License instead.)  You can apply it to
  3675. your programs, too.
  3676.    When we speak of free software, we are referring to freedom, not
  3677. price.  Our General Public Licenses are designed to make sure that you
  3678. have the freedom to distribute copies of free software (and charge for
  3679. this service if you wish), that you receive source code or can get it
  3680. if you want it, that you can change the software or use pieces of it in
  3681. new free programs; and that you know you can do these things.
  3682.    To protect your rights, we need to make restrictions that forbid
  3683. anyone to deny you these rights or to ask you to surrender the rights.
  3684. These restrictions translate to certain responsibilities for you if you
  3685. distribute copies of the software, or if you modify it.
  3686.    For example, if you distribute copies of such a program, whether
  3687. gratis or for a fee, you must give the recipients all the rights that
  3688. you have.  You must make sure that they, too, receive or can get the
  3689. source code.  And you must show them these terms so they know their
  3690. rights.
  3691.    We protect your rights with two steps: (1) copyright the software,
  3692. and (2) offer you this license which gives you legal permission to copy,
  3693. distribute and/or modify the software.
  3694.    Also, for each author's protection and ours, we want to make certain
  3695. that everyone understands that there is no warranty for this free
  3696. software.  If the software is modified by someone else and passed on, we
  3697. want its recipients to know that what they have is not the original, so
  3698. that any problems introduced by others will not reflect on the original
  3699. authors' reputations.
  3700.    Finally, any free program is threatened constantly by software
  3701. patents.  We wish to avoid the danger that redistributors of a free
  3702. program will individually obtain patent licenses, in effect making the
  3703. program proprietary.  To prevent this, we have made it clear that any
  3704. patent must be licensed for everyone's free use or not licensed at all.
  3705.    The precise terms and conditions for copying, distribution and
  3706. modification follow.
  3707.     TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
  3708.   1. This License applies to any program or other work which contains a
  3709.      notice placed by the copyright holder saying it may be distributed
  3710.      under the terms of this General Public License.  The "Program",
  3711.      below, refers to any such program or work, and a "work based on
  3712.      the Program" means either the Program or any derivative work under
  3713.      copyright law: that is to say, a work containing the Program or a
  3714.      portion of it, either verbatim or with modifications and/or
  3715.      translated into another language.  (Hereinafter, translation is
  3716.      included without limitation in the term "modification".)  Each
  3717.      licensee is addressed as "you".
  3718.      Activities other than copying, distribution and modification are
  3719.      not covered by this License; they are outside its scope.  The act
  3720.      of running the Program is not restricted, and the output from the
  3721.      Program is covered only if its contents constitute a work based on
  3722.      the Program (independent of having been made by running the
  3723.      Program).  Whether that is true depends on what the Program does.
  3724.   2. You may copy and distribute verbatim copies of the Program's
  3725.      source code as you receive it, in any medium, provided that you
  3726.      conspicuously and appropriately publish on each copy an appropriate
  3727.      copyright notice and disclaimer of warranty; keep intact all the
  3728.      notices that refer to this License and to the absence of any
  3729.      warranty; and give any other recipients of the Program a copy of
  3730.      this License along with the Program.
  3731.      You may charge a fee for the physical act of transferring a copy,
  3732.      and you may at your option offer warranty protection in exchange
  3733.      for a fee.
  3734.   3. You may modify your copy or copies of the Program or any portion
  3735.      of it, thus forming a work based on the Program, and copy and
  3736.      distribute such modifications or work under the terms of Section 1
  3737.      above, provided that you also meet all of these conditions:
  3738.        a. You must cause the modified files to carry prominent notices
  3739.           stating that you changed the files and the date of any change.
  3740.        b. You must cause any work that you distribute or publish, that
  3741.           in whole or in part contains or is derived from the Program
  3742.           or any part thereof, to be licensed as a whole at no charge
  3743.           to all third parties under the terms of this License.
  3744.        c. If the modified program normally reads commands interactively
  3745.           when run, you must cause it, when started running for such
  3746.           interactive use in the most ordinary way, to print or display
  3747.           an announcement including an appropriate copyright notice and
  3748.           a notice that there is no warranty (or else, saying that you
  3749.           provide a warranty) and that users may redistribute the
  3750.           program under these conditions, and telling the user how to
  3751.           view a copy of this License.  (Exception: if the Program
  3752.           itself is interactive but does not normally print such an
  3753.           announcement, your work based on the Program is not required
  3754.           to print an announcement.)
  3755.      These requirements apply to the modified work as a whole.  If
  3756.      identifiable sections of that work are not derived from the
  3757.      Program, and can be reasonably considered independent and separate
  3758.      works in themselves, then this License, and its terms, do not
  3759.      apply to those sections when you distribute them as separate
  3760.      works.  But when you distribute the same sections as part of a
  3761.      whole which is a work based on the Program, the distribution of
  3762.      the whole must be on the terms of this License, whose permissions
  3763.      for other licensees extend to the entire whole, and thus to each
  3764.      and every part regardless of who wrote it.
  3765.      Thus, it is not the intent of this section to claim rights or
  3766.      contest your rights to work written entirely by you; rather, the
  3767.      intent is to exercise the right to control the distribution of
  3768.      derivative or collective works based on the Program.
  3769.      In addition, mere aggregation of another work not based on the
  3770.      Program with the Program (or with a work based on the Program) on
  3771.      a volume of a storage or distribution medium does not bring the
  3772.      other work under the scope of this License.
  3773.   4. You may copy and distribute the Program (or a work based on it,
  3774.      under Section 2) in object code or executable form under the terms
  3775.      of Sections 1 and 2 above provided that you also do one of the
  3776.      following:
  3777.        a. Accompany it with the complete corresponding machine-readable
  3778.           source code, which must be distributed under the terms of
  3779.           Sections 1 and 2 above on a medium customarily used for
  3780.           software interchange; or,
  3781.        b. Accompany it with a written offer, valid for at least three
  3782.           years, to give any third party, for a charge no more than your
  3783.           cost of physically performing source distribution, a complete
  3784.           machine-readable copy of the corresponding source code, to be
  3785.           distributed under the terms of Sections 1 and 2 above on a
  3786.           medium customarily used for software interchange; or,
  3787.        c. Accompany it with the information you received as to the offer
  3788.           to distribute corresponding source code.  (This alternative is
  3789.           allowed only for noncommercial distribution and only if you
  3790.           received the program in object code or executable form with
  3791.           such an offer, in accord with Subsection b above.)
  3792.      The source code for a work means the preferred form of the work for
  3793.      making modifications to it.  For an executable work, complete
  3794.      source code means all the source code for all modules it contains,
  3795.      plus any associated interface definition files, plus the scripts
  3796.      used to control compilation and installation of the executable.
  3797.      However, as a special exception, the source code distributed need
  3798.      not include anything that is normally distributed (in either
  3799.      source or binary form) with the major components (compiler,
  3800.      kernel, and so on) of the operating system on which the executable
  3801.      runs, unless that component itself accompanies the executable.
  3802.      If distribution of executable or object code is made by offering
  3803.      access to copy from a designated place, then offering equivalent
  3804.      access to copy the source code from the same place counts as
  3805.      distribution of the source code, even though third parties are not
  3806.      compelled to copy the source along with the object code.
  3807.   5. You may not copy, modify, sublicense, or distribute the Program
  3808.      except as expressly provided under this License.  Any attempt
  3809.      otherwise to copy, modify, sublicense or distribute the Program is
  3810.      void, and will automatically terminate your rights under this
  3811.      License.  However, parties who have received copies, or rights,
  3812.      from you under this License will not have their licenses
  3813.      terminated so long as such parties remain in full compliance.
  3814.   6. You are not required to accept this License, since you have not
  3815.      signed it.  However, nothing else grants you permission to modify
  3816.      or distribute the Program or its derivative works.  These actions
  3817.      are prohibited by law if you do not accept this License.
  3818.      Therefore, by modifying or distributing the Program (or any work
  3819.      based on the Program), you indicate your acceptance of this
  3820.      License to do so, and all its terms and conditions for copying,
  3821.      distributing or modifying the Program or works based on it.
  3822.   7. Each time you redistribute the Program (or any work based on the
  3823.      Program), the recipient automatically receives a license from the
  3824.      original licensor to copy, distribute or modify the Program
  3825.      subject to these terms and conditions.  You may not impose any
  3826.      further restrictions on the recipients' exercise of the rights
  3827.      granted herein.  You are not responsible for enforcing compliance
  3828.      by third parties to this License.
  3829.   8. If, as a consequence of a court judgment or allegation of patent
  3830.      infringement or for any other reason (not limited to patent
  3831.      issues), conditions are imposed on you (whether by court order,
  3832.      agreement or otherwise) that contradict the conditions of this
  3833.      License, they do not excuse you from the conditions of this
  3834.      License.  If you cannot distribute so as to satisfy simultaneously
  3835.      your obligations under this License and any other pertinent
  3836.      obligations, then as a consequence you may not distribute the
  3837.      Program at all.  For example, if a patent license would not permit
  3838.      royalty-free redistribution of the Program by all those who
  3839.      receive copies directly or indirectly through you, then the only
  3840.      way you could satisfy both it and this License would be to refrain
  3841.      entirely from distribution of the Program.
  3842.      If any portion of this section is held invalid or unenforceable
  3843.      under any particular circumstance, the balance of the section is
  3844.      intended to apply and the section as a whole is intended to apply
  3845.      in other circumstances.
  3846.      It is not the purpose of this section to induce you to infringe any
  3847.      patents or other property right claims or to contest validity of
  3848.      any such claims; this section has the sole purpose of protecting
  3849.      the integrity of the free software distribution system, which is
  3850.      implemented by public license practices.  Many people have made
  3851.      generous contributions to the wide range of software distributed
  3852.      through that system in reliance on consistent application of that
  3853.      system; it is up to the author/donor to decide if he or she is
  3854.      willing to distribute software through any other system and a
  3855.      licensee cannot impose that choice.
  3856.      This section is intended to make thoroughly clear what is believed
  3857.      to be a consequence of the rest of this License.
  3858.   9. If the distribution and/or use of the Program is restricted in
  3859.      certain countries either by patents or by copyrighted interfaces,
  3860.      the original copyright holder who places the Program under this
  3861.      License may add an explicit geographical distribution limitation
  3862.      excluding those countries, so that distribution is permitted only
  3863.      in or among countries not thus excluded.  In such case, this
  3864.      License incorporates the limitation as if written in the body of
  3865.      this License.
  3866.  10. The Free Software Foundation may publish revised and/or new
  3867.      versions of the General Public License from time to time.  Such
  3868.      new versions will be similar in spirit to the present version, but
  3869.      may differ in detail to address new problems or concerns.
  3870.      Each version is given a distinguishing version number.  If the
  3871.      Program specifies a version number of this License which applies
  3872.      to it and "any later version", you have the option of following
  3873.      the terms and conditions either of that version or of any later
  3874.      version published by the Free Software Foundation.  If the Program
  3875.      does not specify a version number of this License, you may choose
  3876.      any version ever published by the Free Software Foundation.
  3877.  11. If you wish to incorporate parts of the Program into other free
  3878.      programs whose distribution conditions are different, write to the
  3879.      author to ask for permission.  For software which is copyrighted
  3880.      by the Free Software Foundation, write to the Free Software
  3881.      Foundation; we sometimes make exceptions for this.  Our decision
  3882.      will be guided by the two goals of preserving the free status of
  3883.      all derivatives of our free software and of promoting the sharing
  3884.      and reuse of software generally.
  3885.                                 NO WARRANTY
  3886.  12. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
  3887.      WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
  3888.      LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
  3889.      HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
  3890.      WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
  3891.      NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  3892.      FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE
  3893.      QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
  3894.      PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
  3895.      SERVICING, REPAIR OR CORRECTION.
  3896.  13. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
  3897.      WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
  3898.      MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
  3899.      LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
  3900.      INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
  3901.      INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
  3902.      DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
  3903.      OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
  3904.      OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
  3905.      ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  3906.                       END OF TERMS AND CONDITIONS
  3907. How to Apply These Terms to Your New Programs
  3908. =============================================
  3909.    If you develop a new program, and you want it to be of the greatest
  3910. possible use to the public, the best way to achieve this is to make it
  3911. free software which everyone can redistribute and change under these
  3912. terms.
  3913.    To do so, attach the following notices to the program.  It is safest
  3914. to attach them to the start of each source file to most effectively
  3915. convey the exclusion of warranty; and each file should have at least
  3916. the "copyright" line and a pointer to where the full notice is found.
  3917.      ONE LINE TO GIVE THE PROGRAM'S NAME AND AN IDEA OF WHAT IT DOES.
  3918.      Copyright (C) 19YY  NAME OF AUTHOR
  3919.      
  3920.      This program is free software; you can redistribute it and/or
  3921.      modify it under the terms of the GNU General Public License
  3922.      as published by the Free Software Foundation; either version 2
  3923.      of the License, or (at your option) any later version.
  3924.      
  3925.      This program is distributed in the hope that it will be useful,
  3926.      but WITHOUT ANY WARRANTY; without even the implied warranty of
  3927.      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  3928.      GNU General Public License for more details.
  3929.      
  3930.      You should have received a copy of the GNU General Public License
  3931.      along with this program; if not, write to the Free Software
  3932.      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  3933.    Also add information on how to contact you by electronic and paper
  3934. mail.
  3935.    If the program is interactive, make it output a short notice like
  3936. this when it starts in an interactive mode:
  3937.      Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR
  3938.      Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
  3939.      type `show w'.  This is free software, and you are welcome
  3940.      to redistribute it under certain conditions; type `show c'
  3941.      for details.
  3942.    The hypothetical commands `show w' and `show c' should show the
  3943. appropriate parts of the General Public License.  Of course, the
  3944. commands you use may be called something other than `show w' and `show
  3945. c'; they could even be mouse-clicks or menu items--whatever suits your
  3946. program.
  3947.    You should also get your employer (if you work as a programmer) or
  3948. your school, if any, to sign a "copyright disclaimer" for the program,
  3949. if necessary.  Here is a sample; alter the names:
  3950.      Yoyodyne, Inc., hereby disclaims all copyright
  3951.      interest in the program `Gnomovision'
  3952.      (which makes passes at compilers) written
  3953.      by James Hacker.
  3954.      
  3955.      SIGNATURE OF TY COON, 1 April 1989
  3956.      Ty Coon, President of Vice
  3957.    This General Public License does not permit incorporating your
  3958. program into proprietary programs.  If your program is a subroutine
  3959. library, you may consider it more useful to permit linking proprietary
  3960. applications with the library.  If this is what you want to do, use the
  3961. GNU Library General Public License instead of this License.
  3962. File: as,  Node: Index,  Prev: Acknowledgements,  Up: Top
  3963. Index
  3964. *****
  3965. * Menu:
  3966. * #:                                    Comments.
  3967. * #APP:                                 Pre-processing.
  3968. * #NO_APP:                              Pre-processing.
  3969. * -:                                    Command Line.
  3970. * -a:                                   a.
  3971. * -ad:                                  a.
  3972. * -ah:                                  a.
  3973. * -al:                                  a.
  3974. * -an:                                  a.
  3975. * -as:                                  a.
  3976. * -Asparclite:                          Sparc-Opts.
  3977. * -Av6:                                 Sparc-Opts.
  3978. * -Av8:                                 Sparc-Opts.
  3979. * -D:                                   D.
  3980. * -f:                                   f.
  3981. * -I PATH:                              I.
  3982. * -K:                                   K.
  3983. * -L:                                   L.
  3984. * -o:                                   o.
  3985. * -R:                                   R.
  3986. * -v:                                   v.
  3987. * -version:                             v.
  3988. * -W:                                   W.
  3989. * .o:                                   Object.
  3990. * 29K support:                          AMD29K-Dependent.
  3991. * $ in symbol names:                    SH-Chars.
  3992. * $ in symbol names:                    H8/500-Chars.
  3993. * -+ option, VAX/VMS:                   Vax-Opts.
  3994. * -A options, i960:                     Options-i960.
  3995. * -b option, i960:                      Options-i960.
  3996. * -D, ignored on VAX:                   Vax-Opts.
  3997. * -d, VAX option:                       Vax-Opts.
  3998. * -h option, VAX/VMS:                   Vax-Opts.
  3999. * -J, ignored on VAX:                   Vax-Opts.
  4000. * -l option, M680x0:                    M68K-Opts.
  4001. * -m68000 and related options:          M68K-Opts.
  4002. * -norelax option, i960:                Options-i960.
  4003. * -S, ignored on VAX:                   Vax-Opts.
  4004. * -t, ignored on VAX:                   Vax-Opts.
  4005. * -T, ignored on VAX:                   Vax-Opts.
  4006. * -V, redundant on VAX:                 Vax-Opts.
  4007. * . (symbol):                           Dot.
  4008. * : (label):                            Statements.
  4009. * as version:                           v.
  4010. * \" (doublequote character):           Strings.
  4011. * \DDD (octal character code):          Strings.
  4012. * \\ (\ character):                     Strings.
  4013. * \b (backspace character):             Strings.
  4014. * \f (formfeed character):              Strings.
  4015. * \n (newline character):               Strings.
  4016. * \r (carriage return character):       Strings.
  4017. * \t (tab):                             Strings.
  4018. * a.out symbol attributes:              a.out Symbols.
  4019. * ABORT directive:                      ABORT.
  4020. * abort directive:                      Abort.
  4021. * align directive:                      Align.
  4022. * app-file directive:                   App-File.
  4023. * ascii directive:                      Ascii.
  4024. * asciz directive:                      Asciz.
  4025. * block directive, AMD 29K:             AMD29K Directives.
  4026. * bss directive, i960:                  Directives-i960.
  4027. * byte directive:                       Byte.
  4028. * callj, i960 pseudo-opcode:            callj-i960.
  4029. * common directive, SPARC:              Sparc-Directives.
  4030. * comm directive:                       Comm.
  4031. * cputype directive, AMD 29K:           AMD29K Directives.
  4032. * data1 directive, M680x0:              M68K-Directives.
  4033. * data2 directive, M680x0:              M68K-Directives.
  4034. * data directive:                       Data.
  4035. * def directive:                        Def.
  4036. * desc directive:                       Desc.
  4037. * dfloat directive, VAX:                VAX-directives.
  4038. * dim directive:                        Dim.
  4039. * double directive:                     Double.
  4040. * double directive, i386:               i386-Float.
  4041. * double directive, M680x0:             M68K-Float.
  4042. * double directive, VAX:                VAX-float.
  4043. * eject directive:                      Eject.
  4044. * else directive:                       Else.
  4045. * endef directive:                      Endef.
  4046. * endif directive:                      Endif.
  4047. * equ directive:                        Equ.
  4048. * even directive, M680x0:               M68K-Directives.
  4049. * extended directive, i960:             Directives-i960.
  4050. * extern directive:                     Extern.
  4051. * ffloat directive, VAX:                VAX-directives.
  4052. * file directive:                       File.
  4053. * file directive, AMD 29K:              AMD29K Directives.
  4054. * fill directive:                       Fill.
  4055. * float directive:                      Float.
  4056. * float directive, i386:                i386-Float.
  4057. * float directive, M680x0:              M68K-Float.
  4058. * float directive, VAX:                 VAX-float.
  4059. * fwait instruction, i386:              i386-Float.
  4060. * gbr960, i960 postprocessor:           Options-i960.
  4061. * gfloat directive, VAX:                VAX-directives.
  4062. * global directive:                     Global.
  4063. * half directive, SPARC:                Sparc-Directives.
  4064. * hfloat directive, VAX:                VAX-directives.
  4065. * hword directive:                      hword.
  4066. * ident directive:                      Ident.
  4067. * ifdef directive:                      If.
  4068. * ifndef directive:                     If.
  4069. * ifnotdef directive:                   If.
  4070. * if directive:                         If.
  4071. * imul instruction, i386:               i386-Notes.
  4072. * include directive:                    Include.
  4073. * include directive search path:        I.
  4074. * int directive:                        Int.
  4075. * int directive, H8/300:                H8/300 Directives.
  4076. * int directive, H8/500:                H8/500 Directives.
  4077. * int directive, i386:                  i386-Float.
  4078. * int directive, SH:                    SH Directives.
  4079. * lcomm directive:                      Lcomm.
  4080. * leafproc directive, i960:             Directives-i960.
  4081. * lflags directive (ignored):           Lflags.
  4082. * line directive:                       Line.
  4083. * line directive, AMD 29K:              AMD29K Directives.
  4084. * list directive:                       List.
  4085. * ln directive:                         Ln.
  4086. * long directive:                       Long.
  4087. * long directive, i386:                 i386-Float.
  4088. * mul instruction, i386:                i386-Notes.
  4089. * nolist directive:                     Nolist.
  4090. * octa directive:                       Octa.
  4091. * org directive:                        Org.
  4092. * proc directive, SPARC:                Sparc-Directives.
  4093. * psize directive:                      Psize.
  4094. * quad directive:                       Quad.
  4095. * quad directive, i386:                 i386-Float.
  4096. * reserve directive, SPARC:             Sparc-Directives.
  4097. * sbttl directive:                      Sbttl.
  4098. * scl directive:                        Scl.
  4099. * section directive:                    Section.
  4100. * sect directive, AMD 29K:              AMD29K Directives.
  4101. * seg directive, SPARC:                 Sparc-Directives.
  4102. * set directive:                        Set.
  4103. * short directive:                      Short.
  4104. * single directive:                     Single.
  4105. * single directive, i386:               i386-Float.
  4106. * size directive:                       Size.
  4107. * skip directive, M680x0:               M68K-Directives.
  4108. * skip directive, SPARC:                Sparc-Directives.
  4109. * space directive:                      Space.
  4110. * stabX directives:                     Stab.
  4111. * stabd directive:                      Stab.
  4112. * stabn directive:                      Stab.
  4113. * stabs directive:                      Stab.
  4114. * sysproc directive, i960:              Directives-i960.
  4115. * tag directive:                        Tag.
  4116. * text directive:                       Text.
  4117. * tfloat directive, i386:               i386-Float.
  4118. * title directive:                      Title.
  4119. * type directive:                       Type.
  4120. * use directive, AMD 29K:               AMD29K Directives.
  4121. * val directive:                        Val.
  4122. * word directive:                       Word.
  4123. * word directive, H8/300:               H8/300 Directives.
  4124. * word directive, H8/500:               H8/500 Directives.
  4125. * word directive, i386:                 i386-Float.
  4126. * word directive, SH:                   SH Directives.
  4127. * word directive, SPARC:                Sparc-Directives.
  4128. * MIT:                                  M68K-Syntax.
  4129. * a.out:                                Object.
  4130. * absolute section:                     Ld Sections.
  4131. * addition, permitted arguments:        Infix Ops.
  4132. * addresses:                            Expressions.
  4133. * addresses, format of:                 Secs Background.
  4134. * addressing modes, H8/300:             H8/300-Addressing.
  4135. * addressing modes, H8/500:             H8/500-Addressing.
  4136. * addressing modes, M680x0:             M68K-Syntax.
  4137. * addressing modes, M680x0:             M68K-Moto-Syntax.
  4138. * addressing modes, SH:                 SH-Addressing.
  4139. * addressing modes, Z8000:              Z8000-Addressing.
  4140. * advancing location counter:           Org.
  4141. * altered difference tables:            Word.
  4142. * alternate syntax for the 680x0:       M68K-Moto-Syntax.
  4143. * AMD 29K floating point (IEEE):        AMD29K Floating Point.
  4144. * AMD 29K identifiers:                  AMD29K-Chars.
  4145. * AMD 29K line comment character:       AMD29K-Chars.
  4146. * AMD 29K line separator:               AMD29K-Chars.
  4147. * AMD 29K machine directives:           AMD29K Directives.
  4148. * AMD 29K opcodes:                      AMD29K Opcodes.
  4149. * AMD 29K options (none):               AMD29K Options.
  4150. * AMD 29K protected registers:          AMD29K-Regs.
  4151. * AMD 29K register names:               AMD29K-Regs.
  4152. * AMD 29K special purpose registers:    AMD29K-Regs.
  4153. * AMD 29K statement separator:          AMD29K-Chars.
  4154. * AMD 29K support:                      AMD29K-Dependent.
  4155. * architecture options, i960:           Options-i960.
  4156. * architecture options, M680x0:         M68K-Opts.
  4157. * architectures, SPARC:                 Sparc-Opts.
  4158. * arguments for addition:               Infix Ops.
  4159. * arguments for subtraction:            Infix Ops.
  4160. * arguments in expressions:             Arguments.
  4161. * arithmetic functions:                 Operators.
  4162. * arithmetic operands:                  Arguments.
  4163. * assembler internal logic error:       As Sections.
  4164. * assembler, and linker:                Secs Background.
  4165. * assembly listings, enabling:          a.
  4166. * assigning values to symbols:          Equ.
  4167. * assigning values to symbols:          Setting Symbols.
  4168. * attributes, symbol:                   Symbol Attributes.
  4169. * auxiliary attributes, COFF symbols:   COFF Symbols.
  4170. * auxiliary symbol information, COFF:   Dim.
  4171. * Av7:                                  Sparc-Opts.
  4172. * backslash (\\):                       Strings.
  4173. * backspace (\b):                       Strings.
  4174. * bignums:                              Bignums.
  4175. * binary integers:                      Integers.
  4176. * bitfields, not supported on VAX:      VAX-no.
  4177. * block:                                Z8000 Directives.
  4178. * branch improvement, M680x0:           M68K-Branch.
  4179. * branch improvement, VAX:              VAX-branch.
  4180. * branch recording, i960:               Options-i960.
  4181. * branch statistics table, i960:        Options-i960.
  4182. * bss section:                          bss.
  4183. * bss section:                          Ld Sections.
  4184. * bus lock prefixes, i386:              i386-prefixes.
  4185. * bval:                                 Z8000 Directives.
  4186. * call instructions, i386:              i386-Opcodes.
  4187. * carriage return (\r):                 Strings.
  4188. * character constants:                  Characters.
  4189. * character escape codes:               Strings.
  4190. * character, single:                    Chars.
  4191. * characters used in symbols:           Symbol Intro.
  4192. * COFF auxiliary symbol information:    Dim.
  4193. * COFF named section:                   Section.
  4194. * COFF structure debugging:             Tag.
  4195. * COFF symbol attributes:               COFF Symbols.
  4196. * COFF symbol descriptor:               Desc.
  4197. * COFF symbol storage class:            Scl.
  4198. * COFF symbol type:                     Type.
  4199. * COFF symbols, debugging:              Def.
  4200. * COFF value attribute:                 Val.
  4201. * command line conventions:             Command Line.
  4202. * command-line options ignored, VAX:    Vax-Opts.
  4203. * comments:                             Comments.
  4204. * comments, M680x0:                     M68K-Chars.
  4205. * comments, removed by preprocessor:    Pre-processing.
  4206. * common variable storage:              bss.
  4207. * compare and jump expansions, i960:    Compare-and-branch-i960.
  4208. * compare/branch instructions, i960:    Compare-and-branch-i960.
  4209. * conditional assembly:                 If.
  4210. * constant, single character:           Chars.
  4211. * constants:                            Constants.
  4212. * constants, bignum:                    Bignums.
  4213. * constants, character:                 Characters.
  4214. * constants, converted by preprocessor: Pre-processing.
  4215. * constants, floating point:            Flonums.
  4216. * constants, integer:                   Integers.
  4217. * constants, number:                    Numbers.
  4218. * constants, string:                    Strings.
  4219. * continuing statements:                Statements.
  4220. * conversion instructions, i386:        i386-Opcodes.
  4221. * coprocessor wait, i386:               i386-prefixes.
  4222. * current address:                      Dot.
  4223. * current address, advancing:           Org.
  4224. * data and text sections, joining:      R.
  4225. * data section:                         Ld Sections.
  4226. * debuggers, and symbol order:          Symbols.
  4227. * debugging COFF symbols:               Def.
  4228. * decimal integers:                     Integers.
  4229. * deprecated directives:                Deprecated.
  4230. * descriptor, of a.out symbol:          Symbol Desc.
  4231. * difference tables altered:            Word.
  4232. * difference tables, warning:           K.
  4233. * directives and instructions:          Statements.
  4234. * directives, M680x0:                   M68K-Directives.
  4235. * directives, machine independent:      Pseudo Ops.
  4236. * directives, Z8000:                    Z8000 Directives.
  4237. * displacement sizing character, VAX:   VAX-operands.
  4238. * dot (symbol):                         Dot.
  4239. * doublequote (\"):                     Strings.
  4240. * eight-byte integer:                   Quad.
  4241. * empty expressions:                    Empty Exprs.
  4242. * EOF, newline must precede:            Statements.
  4243. * error messsages:                      Errors.
  4244. * escape codes, character:              Strings.
  4245. * even:                                 Z8000 Directives.
  4246. * expr (internal section):              As Sections.
  4247. * expression arguments:                 Arguments.
  4248. * expressions:                          Expressions.
  4249. * expressions, empty:                   Empty Exprs.
  4250. * expressions, integer:                 Integer Exprs.
  4251. * faster processing (-f):               f.
  4252. * file name, logical:                   App-File.
  4253. * file name, logical:                   File.
  4254. * files, including:                     Include.
  4255. * files, input:                         Input Files.
  4256. * filling memory:                       Space.
  4257. * floating point numbers:               Flonums.
  4258. * floating point numbers (double):      Double.
  4259. * floating point numbers (single):      Single.
  4260. * floating point numbers (single):      Float.
  4261. * floating point, AMD 29K (IEEE):       AMD29K Floating Point.
  4262. * floating point, H8/300 (IEEE):        H8/300 Floating Point.
  4263. * floating point, H8/500 (IEEE):        H8/500 Floating Point.
  4264. * floating point, i386:                 i386-Float.
  4265. * floating point, i960 (IEEE):          Floating Point-i960.
  4266. * floating point, M680x0:               M68K-Float.
  4267. * floating point, SH (IEEE):            SH Floating Point.
  4268. * floating point, SPARC (IEEE):         Sparc-Float.
  4269. * floating point, VAX:                  VAX-float.
  4270. * flonums:                              Flonums.
  4271. * format of error messages:             Errors.
  4272. * format of warning messages:           Errors.
  4273. * formfeed (\f):                        Strings.
  4274. * functions, in expressions:            Operators.
  4275. * global:                               Z8000 Directives.
  4276. * grouping data:                        Sub-Sections.
  4277. * H8/300 addressing modes:              H8/300-Addressing.
  4278. * H8/300 floating point (IEEE):         H8/300 Floating Point.
  4279. * H8/300 line comment character:        H8/300-Chars.
  4280. * H8/300 line separator:                H8/300-Chars.
  4281. * H8/300 machine directives (none):     H8/300 Directives.
  4282. * H8/300 opcode summary:                H8/300 Opcodes.
  4283. * H8/300 options (none):                H8/300 Options.
  4284. * H8/300 registers:                     H8/300-Regs.
  4285. * H8/300 size suffixes:                 H8/300 Opcodes.
  4286. * H8/300 support:                       H8/300-Dependent.
  4287. * H8/300H, assembling for:              H8/300 Directives.
  4288. * H8/500 addressing modes:              H8/500-Addressing.
  4289. * H8/500 floating point (IEEE):         H8/500 Floating Point.
  4290. * H8/500 line comment character:        H8/500-Chars.
  4291. * H8/500 line separator:                H8/500-Chars.
  4292. * H8/500 machine directives (none):     H8/500 Directives.
  4293. * H8/500 opcode summary:                H8/500 Opcodes.
  4294. * H8/500 options (none):                H8/500 Options.
  4295. * H8/500 registers:                     H8/500-Regs.
  4296. * H8/500 support:                       H8/500-Dependent.
  4297. * hexadecimal integers:                 Integers.
  4298. * i386 fwait instruction:               i386-Float.
  4299. * i386 mul, imul instructions:          i386-Notes.
  4300. * i386 conversion instructions:         i386-Opcodes.
  4301. * i386 floating point:                  i386-Float.
  4302. * i386 immediate operands:              i386-Syntax.
  4303. * i386 jump optimization:               i386-jumps.
  4304. * i386 jump, call, return:              i386-Syntax.
  4305. * i386 jump/call operands:              i386-Syntax.
  4306. * i386 memory references:               i386-Memory.
  4307. * i386 opcode naming:                   i386-Opcodes.
  4308. * i386 opcode prefixes:                 i386-prefixes.
  4309. * i386 options (none):                  i386-Options.
  4310. * i386 register operands:               i386-Syntax.
  4311. * i386 registers:                       i386-Regs.
  4312. * i386 sections:                        i386-Syntax.
  4313. * i386 size suffixes:                   i386-Syntax.
  4314. * i386 source, destination operands:    i386-Syntax.
  4315. * i386 support:                         i386-Dependent.
  4316. * i386 syntax compatibility:            i386-Syntax.
  4317. * i80306 support:                       i386-Dependent.
  4318. * i960 callj pseudo-opcode:             callj-i960.
  4319. * i960 architecture options:            Options-i960.
  4320. * i960 branch recording:                Options-i960.
  4321. * i960 compare and jump expansions:     Compare-and-branch-i960.
  4322. * i960 compare/branch instructions:     Compare-and-branch-i960.
  4323. * i960 floating point (IEEE):           Floating Point-i960.
  4324. * i960 machine directives:              Directives-i960.
  4325. * i960 opcodes:                         Opcodes for i960.
  4326. * i960 options:                         Options-i960.
  4327. * i960 support:                         i960-Dependent.
  4328. * identifiers, AMD 29K:                 AMD29K-Chars.
  4329. * immediate character, M680x0:          M68K-Chars.
  4330. * immediate character, VAX:             VAX-operands.
  4331. * immediate operands, i386:             i386-Syntax.
  4332. * indirect character, VAX:              VAX-operands.
  4333. * infix operators:                      Infix Ops.
  4334. * inhibiting interrupts, i386:          i386-prefixes.
  4335. * input:                                Input Files.
  4336. * input file linenumbers:               Input Files.
  4337. * instruction set, M680x0:              M68K-opcodes.
  4338. * instruction summary, H8/300:          H8/300 Opcodes.
  4339. * instruction summary, H8/500:          H8/500 Opcodes.
  4340. * instruction summary, SH:              SH Opcodes.
  4341. * instruction summary, Z8000:           Z8000 Opcodes.
  4342. * instructions and directives:          Statements.
  4343. * integer expressions:                  Integer Exprs.
  4344. * integer, 16-byte:                     Octa.
  4345. * integer, 8-byte:                      Quad.
  4346. * integers:                             Integers.
  4347. * integers, 16-bit:                     hword.
  4348. * integers, 32-bit:                     Int.
  4349. * integers, binary:                     Integers.
  4350. * integers, decimal:                    Integers.
  4351. * integers, hexadecimal:                Integers.
  4352. * integers, octal:                      Integers.
  4353. * integers, one byte:                   Byte.
  4354. * internal as sections:                 As Sections.
  4355. * invocation summary:                   Overview.
  4356. * joining text and data sections:       R.
  4357. * jump instructions, i386:              i386-Opcodes.
  4358. * jump optimization, i386:              i386-jumps.
  4359. * jump/call operands, i386:             i386-Syntax.
  4360. * label (:):                            Statements.
  4361. * labels:                               Labels.
  4362. * ld:                                   Object.
  4363. * length of symbols:                    Symbol Intro.
  4364. * line comment character:               Comments.
  4365. * line comment character, AMD 29K:      AMD29K-Chars.
  4366. * line comment character, H8/300:       H8/300-Chars.
  4367. * line comment character, H8/500:       H8/500-Chars.
  4368. * line comment character, M680x0:       M68K-Chars.
  4369. * line comment character, SH:           SH-Chars.
  4370. * line comment character, Z8000:        Z8000-Chars.
  4371. * line numbers, in input files:         Input Files.
  4372. * line numbers, in warnings/errors:     Errors.
  4373. * line separator character:             Statements.
  4374. * line separator, AMD 29K:              AMD29K-Chars.
  4375. * line separator, H8/300:               H8/300-Chars.
  4376. * line separator, H8/500:               H8/500-Chars.
  4377. * line separator, SH:                   SH-Chars.
  4378. * line separator, Z8000:                Z8000-Chars.
  4379. * lines starting with #:                Comments.
  4380. * linker:                               Object.
  4381. * linker, and assembler:                Secs Background.
  4382. * listing control, turning off:         Nolist.
  4383. * listing control, turning on:          List.
  4384. * listing control: new page:            Eject.
  4385. * listing control: paper size:          Psize.
  4386. * listing control: subtitle:            Sbttl.
  4387. * listing control: title line:          Title.
  4388. * listings, enabling:                   a.
  4389. * local common symbols:                 Lcomm.
  4390. * local labels, retaining in output:    L.
  4391. * local symbol names:                   Symbol Names.
  4392. * location counter:                     Dot.
  4393. * location counter, advancing:          Org.
  4394. * logical file name:                    File.
  4395. * logical file name:                    App-File.
  4396. * logical line number:                  Line.
  4397. * logical line numbers:                 Comments.
  4398. * lval:                                 Z8000 Directives.
  4399. * M680x0 addressing modes:              M68K-Moto-Syntax.
  4400. * M680x0 addressing modes:              M68K-Syntax.
  4401. * M680x0 architecture options:          M68K-Opts.
  4402. * M680x0 branch improvement:            M68K-Branch.
  4403. * M680x0 directives:                    M68K-Directives.
  4404. * M680x0 floating point:                M68K-Float.
  4405. * M680x0 immediate character:           M68K-Chars.
  4406. * M680x0 line comment character:        M68K-Chars.
  4407. * M680x0 opcodes:                       M68K-opcodes.
  4408. * M680x0 options:                       M68K-Opts.
  4409. * M680x0 pseudo-opcodes:                M68K-Branch.
  4410. * M680x0 size modifiers:                M68K-Syntax.
  4411. * M680x0 support:                       M68K-Dependent.
  4412. * M680x0 syntax:                        M68K-Moto-Syntax.
  4413. * M680x0 syntax:                        M68K-Syntax.
  4414. * machine dependencies:                 Machine Dependencies.
  4415. * machine directives, AMD 29K:          AMD29K Directives.
  4416. * machine directives, H8/300 (none):    H8/300 Directives.
  4417. * machine directives, H8/500 (none):    H8/500 Directives.
  4418. * machine directives, i960:             Directives-i960.
  4419. * machine directives, SH (none):        SH Directives.
  4420. * machine directives, SPARC:            Sparc-Directives.
  4421. * machine directives, VAX:              VAX-directives.
  4422. * machine independent directives:       Pseudo Ops.
  4423. * machine instructions (not covered):   Manual.
  4424. * machine-independent syntax:           Syntax.
  4425. * manual, structure and purpose:        Manual.
  4426. * memory references, i386:              i386-Memory.
  4427. * merging text and data sections:       R.
  4428. * messages from as:                     Errors.
  4429. * minus, permitted arguments:           Infix Ops.
  4430. * mnemonics for opcodes, VAX:           VAX-opcodes.
  4431. * mnemonics, H8/300:                    H8/300 Opcodes.
  4432. * mnemonics, H8/500:                    H8/500 Opcodes.
  4433. * mnemonics, SH:                        SH Opcodes.
  4434. * mnemonics, Z8000:                     Z8000 Opcodes.
  4435. * Motorola syntax for the 680x0:        M68K-Moto-Syntax.
  4436. * multi-line statements:                Statements.
  4437. * name:                                 Z8000 Directives.
  4438. * named section (COFF):                 Section.
  4439. * named sections:                       Ld Sections.
  4440. * names, symbol:                        Symbol Names.
  4441. * naming object file:                   o.
  4442. * new page, in listings:                Eject.
  4443. * newline (\n):                         Strings.
  4444. * newline, required at file end:        Statements.
  4445. * null-terminated strings:              Asciz.
  4446. * number constants:                     Numbers.
  4447. * numbered subsections:                 Sub-Sections.
  4448. * numbers, 16-bit:                      hword.
  4449. * numeric values:                       Expressions.
  4450. * object file:                          Object.
  4451. * object file format:                   Object Formats.
  4452. * object file name:                     o.
  4453. * obsolescent directives:               Deprecated.
  4454. * octal character code (\DDD):          Strings.
  4455. * octal integers:                       Integers.
  4456. * opcode mnemonics, VAX:                VAX-opcodes.
  4457. * opcode naming, i386:                  i386-Opcodes.
  4458. * opcode prefixes, i386:                i386-prefixes.
  4459. * opcode suffixes, i386:                i386-Syntax.
  4460. * opcode summary, H8/300:               H8/300 Opcodes.
  4461. * opcode summary, H8/500:               H8/500 Opcodes.
  4462. * opcode summary, SH:                   SH Opcodes.
  4463. * opcode summary, Z8000:                Z8000 Opcodes.
  4464. * opcodes for AMD 29K:                  AMD29K Opcodes.
  4465. * opcodes, i960:                        Opcodes for i960.
  4466. * opcodes, M680x0:                      M68K-opcodes.
  4467. * operand delimiters, i386:             i386-Syntax.
  4468. * operand notation, VAX:                VAX-operands.
  4469. * operands in expressions:              Arguments.
  4470. * operator precedence:                  Infix Ops.
  4471. * operators, in expressions:            Operators.
  4472. * operators, permitted arguments:       Infix Ops.
  4473. * option summary:                       Overview.
  4474. * options for AMD29K (none):            AMD29K Options.
  4475. * options for i386 (none):              i386-Options.
  4476. * options for SPARC:                    Sparc-Opts.
  4477. * options for VAX/VMS:                  Vax-Opts.
  4478. * options, all versions of as:          Invoking.
  4479. * options, command line:                Command Line.
  4480. * options, H8/300 (none):               H8/300 Options.
  4481. * options, H8/500 (none):               H8/500 Options.
  4482. * options, i960:                        Options-i960.
  4483. * options, M680x0:                      M68K-Opts.
  4484. * options, SH (none):                   SH Options.
  4485. * options, Z8000:                       Z8000 Options.
  4486. * other attribute, of a.out symbol:     Symbol Other.
  4487. * output file:                          Object.
  4488. * padding the location counter:         Align.
  4489. * page, in listings:                    Eject.
  4490. * paper size, for listings:             Psize.
  4491. * paths for .include:                   I.
  4492. * patterns, writing in memory:          Fill.
  4493. * plus, permitted arguments:            Infix Ops.
  4494. * precedence of operators:              Infix Ops.
  4495. * precision, floating point:            Flonums.
  4496. * prefix operators:                     Prefix Ops.
  4497. * prefixes, i386:                       i386-prefixes.
  4498. * preprocessing:                        Pre-processing.
  4499. * preprocessing, turning on and off:    Pre-processing.
  4500. * primary attributes, COFF symbols:     COFF Symbols.
  4501. * protected registers, AMD 29K:         AMD29K-Regs.
  4502. * pseudo-opcodes, M680x0:               M68K-Branch.
  4503. * pseudo-ops for branch, VAX:           VAX-branch.
  4504. * pseudo-ops, machine independent:      Pseudo Ops.
  4505. * purpose of GNU as:                    GNU Assembler.
  4506. * register names, AMD 29K:              AMD29K-Regs.
  4507. * register names, H8/300:               H8/300-Regs.
  4508. * register names, VAX:                  VAX-operands.
  4509. * register operands, i386:              i386-Syntax.
  4510. * registers, H8/500:                    H8/500-Regs.
  4511. * registers, i386:                      i386-Regs.
  4512. * registers, SH:                        SH-Regs.
  4513. * registers, Z8000:                     Z8000-Regs.
  4514. * relocation:                           Sections.
  4515. * relocation example:                   Ld Sections.
  4516. * repeat prefixes, i386:                i386-prefixes.
  4517. * return instructions, i386:            i386-Syntax.
  4518. * rsect:                                Z8000 Directives.
  4519. * search path for .include:             I.
  4520. * section override prefixes, i386:      i386-prefixes.
  4521. * section-relative addressing:          Secs Background.
  4522. * sections:                             Sections.
  4523. * sections in messages, internal:       As Sections.
  4524. * sections, i386:                       i386-Syntax.
  4525. * sections, named:                      Ld Sections.
  4526. * segm:                                 Z8000 Directives.
  4527. * SH addressing modes:                  SH-Addressing.
  4528. * SH floating point (IEEE):             SH Floating Point.
  4529. * SH line comment character:            SH-Chars.
  4530. * SH line separator:                    SH-Chars.
  4531. * SH machine directives (none):         SH Directives.
  4532. * SH opcode summary:                    SH Opcodes.
  4533. * SH options (none):                    SH Options.
  4534. * SH registers:                         SH-Regs.
  4535. * SH support:                           SH-Dependent.
  4536. * single character constant:            Chars.
  4537. * sixteen bit integers:                 hword.
  4538. * sixteen byte integer:                 Octa.
  4539. * size modifiers, M680x0:               M68K-Syntax.
  4540. * size prefixes, i386:                  i386-prefixes.
  4541. * size suffixes, H8/300:                H8/300 Opcodes.
  4542. * sizes operands, i386:                 i386-Syntax.
  4543. * source program:                       Input Files.
  4544. * source, destination operands; i386:   i386-Syntax.
  4545. * SPARC architectures:                  Sparc-Opts.
  4546. * SPARC floating point (IEEE):          Sparc-Float.
  4547. * SPARC machine directives:             Sparc-Directives.
  4548. * SPARC options:                        Sparc-Opts.
  4549. * SPARC support:                        Sparc-Dependent.
  4550. * special characters, M680x0:           M68K-Chars.
  4551. * special purpose registers, AMD 29K:   AMD29K-Regs.
  4552. * standard as sections:                 Secs Background.
  4553. * standard input, as input file:        Command Line.
  4554. * statement on multiple lines:          Statements.
  4555. * statement separator character:        Statements.
  4556. * statement separator, AMD 29K:         AMD29K-Chars.
  4557. * statement separator, H8/300:          H8/300-Chars.
  4558. * statement separator, H8/500:          H8/500-Chars.
  4559. * statement separator, SH:              SH-Chars.
  4560. * statement separator, Z8000:           Z8000-Chars.
  4561. * statements, structure of:             Statements.
  4562. * stopping the assembly:                Abort.
  4563. * string constants:                     Strings.
  4564. * string literals:                      Ascii.
  4565. * structure debugging, COFF:            Tag.
  4566. * subexpressions:                       Arguments.
  4567. * subtitles for listings:               Sbttl.
  4568. * subtraction, permitted arguments:     Infix Ops.
  4569. * summary of options:                   Overview.
  4570. * supporting files, including:          Include.
  4571. * suppressing warnings:                 W.
  4572. * sval:                                 Z8000 Directives.
  4573. * symbol attributes:                    Symbol Attributes.
  4574. * symbol attributes, a.out:             a.out Symbols.
  4575. * symbol attributes, COFF:              COFF Symbols.
  4576. * symbol descriptor, COFF:              Desc.
  4577. * symbol names:                         Symbol Names.
  4578. * symbol names, $ in:                   SH-Chars.
  4579. * symbol names, $ in:                   H8/500-Chars.
  4580. * symbol names, local:                  Symbol Names.
  4581. * symbol names, temporary:              Symbol Names.
  4582. * symbol storage class (COFF):          Scl.
  4583. * symbol type:                          Symbol Type.
  4584. * symbol type, COFF:                    Type.
  4585. * symbol value:                         Symbol Value.
  4586. * symbol value, setting:                Set.
  4587. * symbol values, assigning:             Setting Symbols.
  4588. * symbol, common:                       Comm.
  4589. * symbol, making visible to linker:     Global.
  4590. * symbolic debuggers, information for:  Stab.
  4591. * symbols:                              Symbols.
  4592. * symbols with lowercase, VAX/VMS:      Vax-Opts.
  4593. * symbols, assigning values to:         Equ.
  4594. * symbols, local common:                Lcomm.
  4595. * syntax compatibility, i386:           i386-Syntax.
  4596. * syntax, M680x0:                       M68K-Syntax.
  4597. * syntax, M680x0:                       M68K-Moto-Syntax.
  4598. * syntax, machine-independent:          Syntax.
  4599. * tab (\t):                             Strings.
  4600. * temporary symbol names:               Symbol Names.
  4601. * text and data sections, joining:      R.
  4602. * text section:                         Ld Sections.
  4603. * trusted compiler:                     f.
  4604. * turning preprocessing on and off:     Pre-processing.
  4605. * type of a symbol:                     Symbol Type.
  4606. * undefined section:                    Ld Sections.
  4607. * unsegm:                               Z8000 Directives.
  4608. * value attribute, COFF:                Val.
  4609. * value of a symbol:                    Symbol Value.
  4610. * VAX bitfields not supported:          VAX-no.
  4611. * VAX branch improvement:               VAX-branch.
  4612. * VAX command-line options ignored:     Vax-Opts.
  4613. * VAX displacement sizing character:    VAX-operands.
  4614. * VAX floating point:                   VAX-float.
  4615. * VAX immediate character:              VAX-operands.
  4616. * VAX indirect character:               VAX-operands.
  4617. * VAX machine directives:               VAX-directives.
  4618. * VAX opcode mnemonics:                 VAX-opcodes.
  4619. * VAX operand notation:                 VAX-operands.
  4620. * VAX register names:                   VAX-operands.
  4621. * VAX support:                          Vax-Dependent.
  4622. * Vax-11 C compatibility:               Vax-Opts.
  4623. * VAX/VMS options:                      Vax-Opts.
  4624. * version of as:                        v.
  4625. * VMS (VAX) options:                    Vax-Opts.
  4626. * warning for altered difference tables: K.
  4627. * warning messages:                     Errors.
  4628. * warnings, suppressing:                W.
  4629. * whitespace:                           Whitespace.
  4630. * whitespace, removed by preprocessor:  Pre-processing.
  4631. * wide floating point directives, VAX:  VAX-directives.
  4632. * writing patterns in memory:           Fill.
  4633. * wval:                                 Z8000 Directives.
  4634. * Z800 addressing modes:                Z8000-Addressing.
  4635. * Z8000 directives:                     Z8000 Directives.
  4636. * Z8000 line comment character:         Z8000-Chars.
  4637. * Z8000 line separator:                 Z8000-Chars.
  4638. * Z8000 opcode summary:                 Z8000 Opcodes.
  4639. * Z8000 options:                        Z8000 Options.
  4640. * Z8000 registers:                      Z8000-Regs.
  4641. * Z8000 support:                        Z8000-Dependent.
  4642. * zero-terminated strings:              Asciz.
  4643. Tag Table:
  4644. Node: Top
  4645. Node: Overview
  4646. Node: Manual
  4647. Node: GNU Assembler
  4648. Node: Object Formats
  4649. Node: Command Line
  4650. Node: Input Files
  4651. Node: Object
  4652. 11025
  4653. Node: Errors
  4654. 11965
  4655. Node: Invoking
  4656. 13157
  4657. Node: a
  4658. 14483
  4659. Node: D
  4660. 15575
  4661. Node: f
  4662. 15795
  4663. Node: I
  4664. 16295
  4665. Node: K
  4666. 16832
  4667. Node: L
  4668. 17126
  4669. Node: o
  4670. 17776
  4671. Node: R
  4672. 18222
  4673. Node: v
  4674. 19125
  4675. Node: W
  4676. 19371
  4677. Node: Syntax
  4678. 19938
  4679. Node: Pre-processing
  4680. 20525
  4681. Node: Whitespace
  4682. 21988
  4683. Node: Comments
  4684. 22374
  4685. Node: Symbol Intro
  4686. 24179
  4687. Node: Statements
  4688. 24857
  4689. Node: Constants
  4690. 26907
  4691. Node: Characters
  4692. 27528
  4693. Node: Strings
  4694. 28016
  4695. Node: Chars
  4696. 30035
  4697. Node: Numbers
  4698. 30771
  4699. Node: Integers
  4700. 31297
  4701. Node: Bignums
  4702. 31935
  4703. Node: Flonums
  4704. 32273
  4705. Node: Sections
  4706. 33800
  4707. Node: Secs Background
  4708. 34158
  4709. Node: Ld Sections
  4710. 38565
  4711. Node: As Sections
  4712. 40949
  4713. Node: Sub-Sections
  4714. 41834
  4715. Node: bss
  4716. 44878
  4717. Node: Symbols
  4718. 45457
  4719. Node: Labels
  4720. 46099
  4721. Node: Setting Symbols
  4722. 46518
  4723. Node: Symbol Names
  4724. 46879
  4725. Node: Dot
  4726. 49827
  4727. Node: Symbol Attributes
  4728. 50267
  4729. Node: Symbol Value
  4730. 50936
  4731. Node: Symbol Type
  4732. 51965
  4733. Node: a.out Symbols
  4734. 52339
  4735. Node: Symbol Desc
  4736. 52584
  4737. Node: Symbol Other
  4738. 52861
  4739. Node: COFF Symbols
  4740. 53012
  4741. Node: Expressions
  4742. 53616
  4743. Node: Empty Exprs
  4744. 53942
  4745. Node: Integer Exprs
  4746. 54282
  4747. Node: Arguments
  4748. 54667
  4749. Node: Operators
  4750. 55759
  4751. Node: Prefix Ops
  4752. 56080
  4753. Node: Infix Ops
  4754. 56394
  4755. Node: Pseudo Ops
  4756. 58192
  4757. Node: Abort
  4758. 61456
  4759. Node: ABORT
  4760. 61852
  4761. Node: Align
  4762. 62109
  4763. Node: App-File
  4764. 62801
  4765. Node: Ascii
  4766. 63333
  4767. Node: Asciz
  4768. 63633
  4769. Node: Byte
  4770. 63866
  4771. Node: Comm
  4772. 64093
  4773. Node: Data
  4774. 64645
  4775. Node: Def
  4776. 64950
  4777. Node: Desc
  4778. 65313
  4779. Node: Dim
  4780. 65805
  4781. Node: Double
  4782. 66191
  4783. Node: Eject
  4784. 66517
  4785. Node: Else
  4786. 66680
  4787. Node: Endef
  4788. 66964
  4789. Node: Endif
  4790. 67281
  4791. Node: Equ
  4792. 67527
  4793. Node: Extern
  4794. 67760
  4795. Node: File
  4796. 68007
  4797. Node: Fill
  4798. 68653
  4799. Node: Float
  4800. 69605
  4801. Node: Global
  4802. 69936
  4803. Node: hword
  4804. 70473
  4805. Node: Ident
  4806. 70789
  4807. Node: If
  4808. 71084
  4809. Node: Include
  4810. 71933
  4811. Node: Int
  4812. 72468
  4813. Node: Lcomm
  4814. 72841
  4815. Node: Lflags
  4816. 73310
  4817. Node: Line
  4818. 73492
  4819. Node: Ln
  4820. 74541
  4821. Node: List
  4822. 74680
  4823. Node: Long
  4824. 75272
  4825. Node: Nolist
  4826. 75438
  4827. Node: Octa
  4828. 75850
  4829. Node: Org
  4830. 76171
  4831. Node: Psize
  4832. 77454
  4833. Node: Quad
  4834. 78127
  4835. Node: Sbttl
  4836. 78563
  4837. Node: Scl
  4838. 78916
  4839. Node: Section
  4840. 79410
  4841. Node: Set
  4842. 79817
  4843. Node: Short
  4844. 80537
  4845. Node: Single
  4846. 80846
  4847. Node: Size
  4848. 81178
  4849. Node: Space
  4850. 81569
  4851. Node: Stab
  4852. 82101
  4853. Node: Tag
  4854. 84102
  4855. Node: Text
  4856. 84603
  4857. Node: Title
  4858. 84910
  4859. Node: Type
  4860. 85277
  4861. Node: Val
  4862. 85648
  4863. Node: Word
  4864. 85998
  4865. Node: Deprecated
  4866. 87866
  4867. Node: Machine Dependencies
  4868. 88095
  4869. Node: Vax-Dependent
  4870. 89433
  4871. Node: Vax-Opts
  4872. 89936
  4873. Node: VAX-float
  4874. 92213
  4875. Node: VAX-directives
  4876. 92829
  4877. Node: VAX-opcodes
  4878. 93673
  4879. Node: VAX-branch
  4880. 94046
  4881. Node: VAX-operands
  4882. 96542
  4883. Node: VAX-no
  4884. 97273
  4885. Node: AMD29K-Dependent
  4886. 97494
  4887. Node: AMD29K Options
  4888. 97895
  4889. Node: AMD29K Syntax
  4890. 98064
  4891. Node: AMD29K-Chars
  4892. 98297
  4893. Node: AMD29K-Regs
  4894. 98598
  4895. Node: AMD29K Floating Point
  4896. 99857
  4897. Node: AMD29K Directives
  4898. 100058
  4899. Node: AMD29K Opcodes
  4900. 101461
  4901. Node: H8/300-Dependent
  4902. 101792
  4903. Node: H8/300 Options
  4904. 102193
  4905. Node: H8/300 Syntax
  4906. 102369
  4907. Node: H8/300-Chars
  4908. 102651
  4909. Node: H8/300-Regs
  4910. 102930
  4911. Node: H8/300-Addressing
  4912. 103829
  4913. Node: H8/300 Floating Point
  4914. 104850
  4915. Node: H8/300 Directives
  4916. 105161
  4917. Node: H8/300 Opcodes
  4918. 105675
  4919. Node: H8/500-Dependent
  4920. 114023
  4921. Node: H8/500 Options
  4922. 114420
  4923. Node: H8/500 Syntax
  4924. 114596
  4925. Node: H8/500-Chars
  4926. 114878
  4927. Node: H8/500-Regs
  4928. 115164
  4929. Node: H8/500-Addressing
  4930. 115915
  4931. Node: H8/500 Floating Point
  4932. 116527
  4933. Node: H8/500 Directives
  4934. 116727
  4935. Node: H8/500 Opcodes
  4936. 117041
  4937. Node: SH-Dependent
  4938. 122149
  4939. Node: SH Options
  4940. 122528
  4941. Node: SH Syntax
  4942. 122688
  4943. Node: SH-Chars
  4944. 122942
  4945. Node: SH-Regs
  4946. 123216
  4947. Node: SH-Addressing
  4948. 123810
  4949. Node: SH Floating Point
  4950. 124699
  4951. Node: SH Directives
  4952. 124879
  4953. Node: SH Opcodes
  4954. 125079
  4955. Node: i960-Dependent
  4956. 129321
  4957. Node: Options-i960
  4958. 129706
  4959. Node: Floating Point-i960
  4960. 133587
  4961. Node: Directives-i960
  4962. 133839
  4963. Node: Opcodes for i960
  4964. 135854
  4965. Node: callj-i960
  4966. 136455
  4967. Node: Compare-and-branch-i960
  4968. 136933
  4969. Node: M68K-Dependent
  4970. 138815
  4971. Node: M68K-Opts
  4972. 139265
  4973. Node: M68K-Syntax
  4974. 140599
  4975. Node: M68K-Moto-Syntax
  4976. 142424
  4977. Node: M68K-Float
  4978. 143913
  4979. Node: M68K-Directives
  4980. 144694
  4981. Node: M68K-opcodes
  4982. 145227
  4983. Node: M68K-Branch
  4984. 145434
  4985. Node: M68K-Chars
  4986. 148257
  4987. Node: Sparc-Dependent
  4988. 148607
  4989. Node: Sparc-Opts
  4990. 148922
  4991. Node: Sparc-Float
  4992. 149851
  4993. Node: Sparc-Directives
  4994. 150028
  4995. Node: i386-Dependent
  4996. 151073
  4997. Node: i386-Options
  4998. 151663
  4999. Node: i386-Syntax
  5000. 151802
  5001. Node: i386-Opcodes
  5002. 153747
  5003. Node: i386-Regs
  5004. 155861
  5005. Node: i386-prefixes
  5006. 156997
  5007. Node: i386-Memory
  5008. 158661
  5009. Node: i386-jumps
  5010. 160934
  5011. Node: i386-Float
  5012. 162045
  5013. Node: i386-Notes
  5014. 164030
  5015. Node: Z8000-Dependent
  5016. 164866
  5017. Node: Z8000 Options
  5018. 165826
  5019. Node: Z8000 Syntax
  5020. 165996
  5021. Node: Z8000-Chars
  5022. 166267
  5023. Node: Z8000-Regs
  5024. 166480
  5025. Node: Z8000-Addressing
  5026. 167247
  5027. Node: Z8000 Directives
  5028. 168185
  5029. Node: Z8000 Opcodes
  5030. 169738
  5031. Node: Acknowledgements
  5032. 179669
  5033. Node: Copying
  5034. 183799
  5035. Node: Index
  5036. 202971
  5037. End Tag Table
  5038.